Commit c601a639 authored by Claudio Valerio's avatar Claudio Valerio

Merge branch 'master' of github.com:Sankore/Sankore-3.1

Conflicts:
	src/board/UBFeaturesController.h
parents abd1c8cb 865f0769
......@@ -69,7 +69,6 @@
<addaction name="actionForward"/>
<addaction name="separator"/>
<addaction name="actionErase"/>
<addaction name="actionGroupItems"/>
<addaction name="actionBoard"/>
<addaction name="actionTutorial"/>
<addaction name="actionWeb"/>
......
......@@ -1418,19 +1418,19 @@ var sankoreLang = {
"city":"Сана",
"country":"Йемен"
}
},
},
"fr":{
"capital":"Capital ville",
"europe":"l'Europe",
"asia":"l'Asie",
"north_america":"l'Amérique du Nord",
"south_america":"l'Amérique du Sud",
"oceania":"l'Océanie",
"africa":"l'Afrique",
"capital":"Capitale",
"europe":"Europe",
"asia":"Asie",
"north_america":"Amérique du Nord",
"south_america":"Amérique du Sud",
"oceania":"Océanie",
"africa":"Afrique",
"eurasia": "Eurasie",
"MA":{
"city":"Rabat",
"country":"le Maroc"
"country":"Maroc"
},
"DZ":{
"city":"Alger",
......@@ -1438,15 +1438,15 @@ var sankoreLang = {
},
"TN":{
"city":"Tunis",
"country":"la Tunisie"
"country":"Tunisie"
},
"LY":{
"city":"Tripoli",
"country":"La Libye"
"country":"Libye"
},
"EG":{
"city":"Le Caire",
"country":"l'Égypte"
"country":"Égypte"
},
"Sahara_occidental":{
"city":"",
......@@ -1481,12 +1481,12 @@ var sankoreLang = {
"country":"Djibouti"
},
"ET":{
"city":"Addis Ababa",
"city":"Addis-Abeba",
"country":"Ethiopie"
},
"SO":{
"city":"Mogadiscio",
"country":"Somalia"
"country":"Somalie"
},
"KE":{
"city":"Nairobi",
......@@ -1494,7 +1494,7 @@ var sankoreLang = {
},
"UG":{
"city":"Kampala",
"country":"l'Ouganda"
"country":"Ouganda"
},
"CD":{
"city":"Kinshasa",
......@@ -1510,10 +1510,10 @@ var sankoreLang = {
},
"NG":{
"city":"Abuja",
"country":"Nigeria"
"country":"Nigéria"
},
"BJ":{
"city":"Porto Novo",
"city":"Porto-Novo",
"country":"Bénin"
},
"TG":{
......@@ -1526,15 +1526,15 @@ var sankoreLang = {
},
"CI":{
"city":"Yamoussoukro",
"country":"La Côte d'Ivoire"
"country":"Côte d'Ivoire"
},
"BF":{
"city":"Ouagadougou",
"country":"Burkina Faso"
},
"LR":{
"city":"Monravia",
"country":"Le Libéria"
"city":"Monrovia",
"country":"Libéria"
},
"SL":{
"city":"Freetown",
......@@ -1546,7 +1546,7 @@ var sankoreLang = {
},
"GW":{
"city":"Bissau",
"country":"La Guinée-Bissau"
"country":"Guinée-Bissau"
},
"SN":{
"city":"Dakar",
......@@ -1574,7 +1574,7 @@ var sankoreLang = {
},
"GQ":{
"city":"Malabo",
"country":"La Guinée Equatoriale"
"country":"Guinée Equatoriale"
},
"TZ":{
"city":"Dodoma",
......@@ -1605,12 +1605,12 @@ var sankoreLang = {
"country":"Botswana"
},
"NA":{
"city":"Windhoec",
"city":"Windhoek",
"country":"Namibie"
},
"ZA":{
"city":"Pretoria",
"country":"l'Afrique du Sud"
"country":"Afrique du Sud"
},
"LS":{
"city":"Maseru",
......@@ -1641,7 +1641,7 @@ var sankoreLang = {
"country":"Paraguay"
},
"BO":{
"city":"La Paz",
"city":"Sucre",
"country":"Bolivie"
},
"BR":{
......@@ -1654,7 +1654,7 @@ var sankoreLang = {
},
"EC":{
"city":"Quito",
"country":"L'Equateur"
"country":"Equateur"
},
"CO":{
"city":"Bogota",
......@@ -1662,7 +1662,7 @@ var sankoreLang = {
},
"VE":{
"city":"Caracas",
"country":"Venezuela"
"country":"Vénézuéla"
},
"GY":{
"city":"Georgetown",
......@@ -1673,7 +1673,7 @@ var sankoreLang = {
"country":"Suriname"
},
"GF":{
"city":"Paris",
"city":"Cayenne",
"country":"Guyane française"
},
"CA":{
......@@ -1682,14 +1682,14 @@ var sankoreLang = {
},
"GL":{
"city":"Nuuk",
"country":"Greenland"
"country":"Grnland"
},
"US":{
"city":"Washington",
"country":"Les États-Unis d'Amérique"
"country":"États-Unis d'Amérique"
},
"MX":{
"city":"Mexique",
"city":"Mexico",
"country":"Mexique"
},
"CU":{
......@@ -1701,7 +1701,7 @@ var sankoreLang = {
"country":"Haïti"
},
"DO":{
"city":"Santo Domingo",
"city":"Saint-Domingue",
"country":"République Dominicaine"
},
"JM":{
......@@ -1721,8 +1721,8 @@ var sankoreLang = {
"country":"Belize"
},
"SV":{
"city":"Salvador",
"country":"San Salvador"
"city":"San Salvador",
"country":"Salvador"
},
"HN":{
"city":"Tegucigalpa",
......@@ -1734,7 +1734,7 @@ var sankoreLang = {
},
"CR":{
"city":"San José",
"country":"Costa-Rica"
"country":"Costa Rica"
},
"PA":{
"city":"Panama",
......@@ -1746,11 +1746,11 @@ var sankoreLang = {
},
"NZ":{
"city":"Wellington",
"country":"New Zealand"
"country":"Nouvelle-Zélande"
},
"PG":{
"city":"Port Moresby",
"country":"La Papouasie-Nouvelle-Guinée"
"country":"Papouasie-Nouvelle-Guinée"
},
"ID":{
"city":"Jakarta",
......@@ -1765,7 +1765,7 @@ var sankoreLang = {
"country":"Vanuatu"
},
"NC":{
"city":"Paris",
"city":"Nouméa",
"country":"Nouvelle-Calédonie"
},
"AL":{
......@@ -1774,10 +1774,10 @@ var sankoreLang = {
},
"DE":{
"city":"Berlin",
"country":"l'Allemagne"
"country":"Allemagne"
},
"AD":{
"city":"Andorre la Vieille",
"city":"Andorre-la-Vieille",
"country":"Andorre"
},
"AM":{
......@@ -1785,7 +1785,7 @@ var sankoreLang = {
"country":"Arménie"
},
"AT":{
"city":"Vienna",
"city":"Vienne",
"country":"Autriche"
},
"AZ":{
......@@ -1802,11 +1802,11 @@ var sankoreLang = {
},
"BA":{
"city":"Sarajevo",
"country":"Bosnie"
"country":"Bosnie-Herzégovine"
},
"BG":{
"city":"Sofia",
"country":"La Bulgarie"
"country":"Bulgarie"
},
"CY":{
"city":"Nicosie",
......@@ -1817,16 +1817,16 @@ var sankoreLang = {
"country":"Croatie"
},
"DK":{
"city":"De Copenhague",
"city":"Copenhague",
"country":"Danemark"
},
"ES":{
"city":"Madrid",
"country":"L'Espagne"
"country":"Espagne"
},
"EE":{
"city":"Tallinn",
"country":"Estonia"
"country":"Estonie"
},
"FI":{
"city":"Helsinki",
......@@ -1838,7 +1838,7 @@ var sankoreLang = {
},
"GE":{
"city":"Tbilissi",
"country":"Georgia"
"country":"Géorgie"
},
"EL":{
"city":"Athènes",
......@@ -1850,11 +1850,11 @@ var sankoreLang = {
},
"IE":{
"city":"Dublin",
"country":"L'Irlande"
"country":"Irlande"
},
"IS":{
"city":"Reykjavik",
"country":"L'île"
"country":"Islande"
},
"IT":{
"city":"Rome",
......@@ -1878,7 +1878,7 @@ var sankoreLang = {
},
"MK":{
"city":"Skopje",
"country":"Macedoine"
"country":"Macédoine"
},
"MT":{
"city":"La Valette",
......@@ -1886,7 +1886,7 @@ var sankoreLang = {
},
"MD":{
"city":"Chisinau",
"country":"La Moldavie"
"country":"Moldavie"
},
"MC":{
"city":"Monaco",
......@@ -1902,14 +1902,14 @@ var sankoreLang = {
},
"NL":{
"city":"Amsterdam",
"country":"Pays Bas"
"country":"Pays-Bas"
},
"PL":{
"city":"Varsovie",
"country":"La Pologne"
"country":"Pologne"
},
"PT":{
"city":"De Lisbonne",
"city":"Lisbonne",
"country":"Portugal"
},
"CZ":{
......@@ -1921,7 +1921,7 @@ var sankoreLang = {
"country":"Roumanie"
},
"UK":{
"city":"London",
"city":"Londres",
"country":"Royaume-Uni"
},
"SM":{
......@@ -1934,7 +1934,7 @@ var sankoreLang = {
},
"SK":{
"city":"Bratislava",
"country":"Slovakia"
"country":"Slovaquie"
},
"SI":{
"city":"Ljubljana",
......@@ -1946,18 +1946,18 @@ var sankoreLang = {
},
"CH":{
"city":"Berne",
"country":"La Suisse"
"country":"Suisse"
},
"TR":{
"city":"Ankara",
"country":"La Turquie"
"country":"Turquie"
},
"UA":{
"city":"Kiev",
"country":"Ukraine"
},
"VA":{
"city":"Vatican",
"city":"Cité du Vatican",
"country":"Vatican"
},
"AF":{
......@@ -1966,23 +1966,23 @@ var sankoreLang = {
},
"SA":{
"city":"Riyad",
"country":"L'Arabie Saoudite"
"country":"Arabie Saoudite"
},
"BH":{
"city":"Manama",
"country":"Bahrein"
"country":"Bahreïn"
},
"BD":{
"city":"Dacca",
"country":"Bangladesh"
},
"BT":{
"city":"Thimphu",
"city":"Thimphou",
"country":"Bhoutan"
},
"BN":{
"city":"Andar Seri Begawan",
"country":"Brunei"
"city":"Bandar Seri Begawan",
"country":"Bruneï"
},
"KH":{
"city":"Phnom Penh",
......@@ -1994,27 +1994,27 @@ var sankoreLang = {
},
"KP":{
"city":"Pyongyang",
"country":"La Corée du Nord"
"country":"Corée du Nord"
},
"KR":{
"city":"Seoul",
"country":"La Corée du Sud"
"city":"Séoul",
"country":"Corée du Sud"
},
"AE":{
"city":"Abu Dhabi",
"city":"Abou Dabi",
"country":"Emirats Arabes Unis"
},
"IN":{
"city":"Delhi",
"country":"L'Inde"
"city":"New Delhi",
"country":"Inde"
},
"IR":{
"city":"Téhéran",
"country":"L'Iran"
"country":"Iran"
},
"IQ":{
"city":"Bagdad",
"country":"L'Irak"
"country":"Irak"
},
"IL":{
"city":"Jérusalem",
......@@ -2026,23 +2026,23 @@ var sankoreLang = {
},
"JO":{
"city":"Amman",
"country":"Jordan"
"country":"Jordanie"
},
"KZ":{
"city":"Astana",
"country":"Kazakhstan"
},
"KG":{
"city":"Bishkek",
"country":"Kirghizstan"
"city":"Bichkek",
"country":"Kirghizistan"
},
"KW":{
"city":"Koweit",
"country":"Koweit"
"city":"Koweït",
"country":"Koweït"
},
"LA":{
"city":"Laos",
"country":"Vientiane"
"city":"Vientiane",
"country":"Laos"
},
"LB":{
"city":"Beyrouth",
......@@ -2050,10 +2050,10 @@ var sankoreLang = {
},
"MY":{
"city":"Kuala Lumpur",
"country":"La Malaisie"
"country":"Malaisie"
},
"MV":{
"city":"Male",
"city":"Malé",
"country":"Maldives"
},
"MN":{
......@@ -2062,14 +2062,14 @@ var sankoreLang = {
},
"MM":{
"city":"Naypyidaw",
"country":"Myanmar"
"country":"Birmanie"
},
"NP":{
"city":"Katmandou",
"country":"Népal"
},
"OM":{
"city":"Muscat",
"city":"Mascate",
"country":"Oman"
},
"UZ":{
......@@ -2078,56 +2078,55 @@ var sankoreLang = {
},
"PK":{
"city":"Islamabad",
"country":"Le Pakistan"
"country":"Pakistan"
},
"PH":{
"city":"Manille",
"country":"Philippines"
},
"QA":{
"city":"De Doha",
"city":"Doha",
"country":"Qatar"
},
"RU":{
"city":"Moscou",
"country":"La Russie"
"country":"Russie"
},
"SG":{
"city":"Singapour",
"country":"Singapour"
},
"LK":{
"city":"Colombo",
"city":"Sri Jayawardenapura",
"country":"Sri Lanka"
},
"SY":{
"city":"Damask",
"country":"La Syrie"
"city":"Damas",
"country":"Syrie"
},
"TJ":{
"city":"Douchanbé",
"country":"Tajikistan"
"country":"Tadjikistan"
},
"TH":{
"city":"Bangkok",
"country":"Thailande"
"country":"Thaïlande"
},
"TL":{
"city":"Dili",
"country":"Le Timor-oriental"
"country":"Timor-oriental"
},
"TM":{
"city":"Achkhabad",
"city":"Achgabat",
"country":"Turkménistan"
},
"VN":{
"city":"Hanoï",
"country":"Viet Nam"
"country":"Vietnam"
},
"YE":{
"city":"Sana",
"city":"Sanaa",
"country":"Yémen"
}
}
};
......@@ -632,7 +632,6 @@ function onDropTarget(obj, event) {
}
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
tmp = tmp.substr(1, tmp.length);
var tmp_img = $("<img/>").attr("src", tmp);
$(obj).append(tmp_img);
setTimeout(function(){
......
......@@ -717,7 +717,6 @@ function onDropTarget(obj, event) {
}
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
tmp = tmp.substr(1, tmp.length);
var tmp_img = $("<img/>").attr("src", tmp);
$(obj).append(tmp_img);
setTimeout(function(){
......@@ -782,4 +781,4 @@ if (window.widget) {
$(this).parent().find(":first-child").removeClass("stop").addClass("play");
});
}
}
\ No newline at end of file
}
......@@ -623,7 +623,6 @@ function onDropTarget(obj, event) {
textData = stringToXML(textData);
if(textData.getElementsByTagName("ready")[0].firstChild.textContent == "true"){
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
tmp = tmp.substr(1, tmp.length);
var img_block = $("<div class='img_block' style='text-align: center;'>");
$("<div class='close_img'>").appendTo(img_block);
$("<input type='hidden' value='" + $(obj).find("input[name='mask']").val() + "'/>").appendTo(img_block);
......@@ -668,4 +667,4 @@ function onDropTarget(obj, event) {
event.cancelBubble = true;
}
return false;
}
\ No newline at end of file
}
......@@ -472,7 +472,6 @@ function onDropTarget(obj, event) {
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
tmp = tmp.substr(1, tmp.length);
if(tmp_type.substr(0, 5) == "audio"){
var audio_block = $("<div class='audio_block'>").draggable().appendTo($(obj));
audio_block.css("position","absolute").css("top",event.clientY).css("left",event.clientX);
......@@ -530,4 +529,4 @@ $(window).resize(function(){
$(this).width(slider.width()).height(slider.height());
});
slider.setSize(slider.width(), slider.height());
})
\ No newline at end of file
})
......@@ -399,7 +399,6 @@ function onDropTarget(obj, event) {
}
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
tmp = tmp.substr(1, tmp.length);
//alert(textData.getElementsByTagName("type")[0].firstChild.textContent + " | " + textData.getElementsByTagName("path")[0].firstChild.textContent);
var tmp_img = $("<img/>").attr("src", tmp);
//alert(1)
......
......@@ -381,7 +381,6 @@ function onDropAudio(obj, event) {
var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
if(tmp_type.substr(0, 5) == "audio"){
var audio_block = $(obj).find(".audio_block");
tmp = tmp.substr(1, tmp.length);
$(obj).find("audio").remove();
audio_block.find(":first-child").removeClass("stop").addClass("play");
var source = $("<source/>").attr("src", tmp);
......@@ -409,4 +408,4 @@ if (window.widget) {
$(this).parent().find(":first-child").removeClass("stop").addClass("play");
});
}
}
\ No newline at end of file
}
......@@ -359,7 +359,6 @@ function onDropTarget(obj, event) {
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
tmp = tmp.substr(1, tmp.length);
if(tmp_type.substr(0, 5) == "audio"){
var img_tmp = $("<div class='img_block'>").insertBefore($(obj).find(".add_img"));
var audio_block = $("<div class='audio_block'>").appendTo(img_tmp)
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<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"
version="1.0"
id="Layer_1"
x="0px"
y="0px"
width="116.314px"
height="116.314px"
viewBox="0 0 116.314 116.314"
enable-background="new 0 0 116.314 116.314"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="red_square_rnd.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata7161"><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><defs
id="defs7159"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 58.157001 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="116.314 : 58.157001 : 1"
inkscape:persp3d-origin="58.157001 : 38.771334 : 1"
id="perspective7163" />
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_1_"
id="linearGradient7681"
gradientUnits="userSpaceOnUse"
x1="2.1924"
y1="56.8423"
x2="110.7549"
y2="56.8423" />
<linearGradient
id="SVGID_1_"
gradientUnits="userSpaceOnUse"
x1="2.1924"
y1="56.8423"
x2="110.7549"
y2="56.8423">
<stop
offset="0"
style="stop-color:#FF897A"
id="stop7152" />
<stop
offset="1"
style="stop-color:#FF3400"
id="stop7154" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_1_"
id="linearGradient7687"
gradientUnits="userSpaceOnUse"
x1="2.1924"
y1="56.8423"
x2="110.7549"
y2="56.8423" />
</defs><sodipodi:namedview
inkscape:window-height="970"
inkscape:window-width="1680"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:zoom="4.1611499"
inkscape:cx="11.054637"
inkscape:cy="58.157001"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:current-layer="Layer_1" />
<g
id="g7690">
<path
style="opacity:0.25;fill-rule:evenodd"
id="path7147"
d="M 5.887,31.278 C 5.887,16.869 17.566,5.19 31.975,5.19 L 88.364,5.19 C 102.772,5.19 114.45,16.869 114.45,31.278 L 114.45,87.666 C 114.45,102.074 102.772,113.754 88.364,113.754 L 31.975,113.754 C 17.566,113.754 5.887,102.074 5.887,87.666 L 5.887,31.278 z"
clip-rule="evenodd" /><path
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-opacity:1;fill-opacity:1"
id="path7156"
d="M 2.192,28.648 C 2.192,14.239 13.87,2.56 28.28,2.56 L 84.669,2.56 C 99.077,2.56 110.755,14.239 110.755,28.648 L 110.755,85.036 C 110.755,99.444 99.077,111.124 84.669,111.124 L 28.28,111.124 C 13.87,111.124 2.192,99.444 2.192,85.036 L 2.192,28.648 z"
clip-rule="evenodd" /></g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<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"
version="1.0"
id="Layer_1"
x="0px"
y="0px"
width="116.314px"
height="116.314px"
viewBox="0 0 116.314 116.314"
enable-background="new 0 0 116.314 116.314"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="red_square.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata6561"><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><defs
id="defs6559"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 58.157001 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="116.314 : 58.157001 : 1"
inkscape:persp3d-origin="58.157001 : 38.771334 : 1"
id="perspective6563" />
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_1_"
id="linearGradient6572"
gradientUnits="userSpaceOnUse"
x1="2.1914001"
y1="56.8423"
x2="110.7539"
y2="56.8423" />
<linearGradient
id="SVGID_1_"
gradientUnits="userSpaceOnUse"
x1="2.1914001"
y1="56.8423"
x2="110.7539"
y2="56.8423">
<stop
offset="0"
style="stop-color:#FF897A"
id="stop6552" />
<stop
offset="1"
style="stop-color:#FF3400"
id="stop6554" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_1_"
id="linearGradient6578"
gradientUnits="userSpaceOnUse"
x1="2.1914001"
y1="56.8423"
x2="110.7539"
y2="56.8423" />
</defs><sodipodi:namedview
inkscape:window-height="970"
inkscape:window-width="1680"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:zoom="4.1611499"
inkscape:cx="11.054637"
inkscape:cy="58.157001"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:current-layer="Layer_1" />
<g
id="g7090">
<rect
style="opacity:0.25;fill-rule:evenodd"
id="rect6547"
height="108.563"
width="108.563"
clip-rule="evenodd"
y="5.1900001"
x="5.8860002" /><rect
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;fill-opacity:1;stroke-opacity:1"
id="rect6556"
height="108.563"
width="108.562"
clip-rule="evenodd"
y="2.5610001"
x="2.191" /></g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<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"
version="1.0"
id="Layer_1"
x="0px"
y="0px"
width="96.661px"
height="119.096px"
viewBox="0 0 96.661 119.096"
enable-background="new 0 0 96.661 119.096"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="red_arrow_down.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata4418"><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><defs
id="defs4416"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 59.548 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="96.661003 : 59.548 : 1"
inkscape:persp3d-origin="48.330502 : 39.698667 : 1"
id="perspective4420" />
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient4429"
gradientUnits="userSpaceOnUse"
x1="2.6235001"
y1="58.913601"
x2="90.977997"
y2="58.913601" />
<linearGradient
id="SVGID_2_"
gradientUnits="userSpaceOnUse"
x1="2.6235001"
y1="58.913601"
x2="90.977997"
y2="58.913601">
<stop
offset="0"
style="stop-color:#FFFFFF"
id="stop4411" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient4434"
gradientUnits="userSpaceOnUse"
x1="2.6235001"
y1="58.913601"
x2="90.977997"
y2="58.913601" />
</defs><sodipodi:namedview
inkscape:window-height="669"
inkscape:window-width="640"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:zoom="4.0639484"
inkscape:cx="48.330502"
inkscape:cy="59.548"
inkscape:window-x="92"
inkscape:window-y="92"
inkscape:current-layer="Layer_1" />
<g
id="g4438">
<path
style="opacity:0.25;fill-rule:evenodd"
id="path4404"
d="M 36.043,64.812 L 36.043,8.574 C 36.043,7.337 37.129,6.249 38.368,6.249 L 63.62,6.249 C 64.856,6.249 65.946,7.337 65.946,8.574 L 65.946,64.812 L 92.092,64.812 C 94.583,64.812 95.484,66.802 93.838,68.673 L 52.242,116.013 C 51.277,117.112 49.711,117.112 48.746,116.013 L 7.151,68.674 C 5.506,66.803 6.406,64.813 8.897,64.813 L 36.043,64.813 L 36.043,64.812 z"
clip-rule="evenodd" /><path
style="fill:url(#linearGradient4434);fill-rule:evenodd;stroke:#000000"
id="path4413"
d="M 32.349,62.183 L 32.349,5.944 C 32.349,4.707 33.435,3.619 34.673,3.619 L 59.925,3.619 C 61.161,3.619 62.251,4.707 62.251,5.944 L 62.251,62.182 L 88.397,62.182 C 90.889,62.182 91.79,64.172 90.143,66.043 L 48.547,113.383 C 47.582,114.482 46.016,114.482 45.051,113.383 L 3.457,66.044 C 1.812,64.173 2.711,62.183 5.203,62.183 L 32.349,62.183 z"
clip-rule="evenodd" /></g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<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"
version="1.0"
id="Layer_1"
x="0px"
y="0px"
width="119.268px"
height="96.873px"
viewBox="0 0 119.268 96.873"
enable-background="new 0 0 119.268 96.873"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="red_arrow_right.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata4600"><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><defs
id="defs4598"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 48.436501 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="119.268 : 48.436501 : 1"
inkscape:persp3d-origin="59.633999 : 32.291 : 1"
id="perspective4602" />
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient4611"
gradientUnits="userSpaceOnUse"
x1="2.8101001"
y1="47.8018"
x2="113.3979"
y2="47.8018" />
<linearGradient
id="SVGID_2_"
gradientUnits="userSpaceOnUse"
x1="2.8101001"
y1="47.8018"
x2="113.3979"
y2="47.8018">
<stop
offset="0"
style="stop-color:#FFFFFF"
id="stop4593" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient4616"
gradientUnits="userSpaceOnUse"
x1="2.8101001"
y1="47.8018"
x2="113.3979"
y2="47.8018" />
</defs><sodipodi:namedview
inkscape:window-height="669"
inkscape:window-width="640"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:zoom="4.745615"
inkscape:cx="59.633999"
inkscape:cy="48.436501"
inkscape:window-x="184"
inkscape:window-y="184"
inkscape:current-layer="Layer_1" />
<g
id="g4620">
<path
style="opacity:0.25;fill-rule:evenodd"
id="path4586"
d="M 65.069,64.885 L 8.831,64.885 C 7.593,64.885 6.505,63.797 6.505,62.559 L 6.505,37.307 C 6.505,36.07 7.593,34.982 8.831,34.982 L 65.069,34.982 L 65.069,8.834 C 65.069,6.341 67.057,5.443 68.93,7.086 L 116.27,48.685 C 117.368,49.65 117.368,51.214 116.27,52.179 L 68.93,93.776 C 67.057,95.422 65.069,94.521 65.069,92.031 L 65.069,64.885 z"
clip-rule="evenodd" /><path
style="fill:url(#linearGradient4616);fill-rule:evenodd;stroke:#000000"
id="path4595"
d="M 61.375,62.255 L 5.136,62.255 C 3.898,62.255 2.81,61.167 2.81,59.929 L 2.81,34.677 C 2.81,33.44 3.898,32.352 5.136,32.352 L 61.375,32.352 L 61.375,6.204 C 61.375,3.711 63.363,2.813 65.235,4.456 L 112.575,46.055 C 113.673,47.02 113.673,48.584 112.575,49.549 L 65.235,91.147 C 63.363,92.793 61.375,91.892 61.375,89.402 L 61.375,62.255 z"
clip-rule="evenodd" /></g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<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"
version="1.0"
id="Layer_1"
x="0px"
y="0px"
width="119.268px"
height="96.873px"
viewBox="0 0 119.268 96.873"
enable-background="new 0 0 119.268 96.873"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="red_arrow_left.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata4509"><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><defs
id="defs4507"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 48.436501 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="119.268 : 48.436501 : 1"
inkscape:persp3d-origin="59.633999 : 32.291 : 1"
id="perspective4511" />
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient4520"
gradientUnits="userSpaceOnUse"
x1="2.8104999"
y1="47.8018"
x2="113.3989"
y2="47.8018" />
<linearGradient
id="SVGID_2_"
gradientUnits="userSpaceOnUse"
x1="2.8104999"
y1="47.8018"
x2="113.3989"
y2="47.8018">
<stop
offset="0"
style="stop-color:#FFFFFF"
id="stop4502" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient4525"
gradientUnits="userSpaceOnUse"
x1="2.8104999"
y1="47.8018"
x2="113.3989"
y2="47.8018" />
</defs><sodipodi:namedview
inkscape:window-height="669"
inkscape:window-width="640"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:zoom="4.745615"
inkscape:cx="59.633999"
inkscape:cy="48.436501"
inkscape:window-x="138"
inkscape:window-y="138"
inkscape:current-layer="Layer_1" />
<g
id="g4529">
<path
style="opacity:0.25;fill-rule:evenodd"
id="path4495"
d="M 58.528,35.98 L 114.769,35.98 C 116.005,35.98 117.093,37.066 117.093,38.305 L 117.093,63.558 C 117.093,64.793 116.005,65.883 114.769,65.883 L 58.528,65.883 L 58.528,92.03 C 58.528,94.52 56.54,95.421 54.668,93.775 L 7.328,52.179 C 6.231,51.216 6.231,49.65 7.328,48.685 L 54.668,7.086 C 56.54,5.443 58.528,6.341 58.528,8.834 L 58.528,35.98 L 58.528,35.98 z"
clip-rule="evenodd" /><path
style="fill:url(#linearGradient4525);fill-rule:evenodd;stroke:#000000"
id="path4504"
d="M 54.833,33.351 L 111.074,33.351 C 112.311,33.351 113.399,34.437 113.399,35.676 L 113.399,60.929 C 113.399,62.164 112.311,63.254 111.074,63.254 L 54.833,63.254 L 54.833,89.401 C 54.833,91.891 52.845,92.792 50.974,91.146 L 3.633,49.549 C 2.536,48.586 2.536,47.02 3.633,46.055 L 50.974,4.456 C 52.845,2.813 54.833,3.711 54.833,6.204 L 54.833,33.351 z"
clip-rule="evenodd" /></g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<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"
version="1.0"
id="Layer_1"
x="0px"
y="0px"
width="96.661px"
height="119.096px"
viewBox="0 0 96.661 119.096"
enable-background="new 0 0 96.661 119.096"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="red_arrow_up.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata4711"><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><defs
id="defs4709"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 59.548 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="96.661003 : 59.548 : 1"
inkscape:persp3d-origin="48.330502 : 39.698667 : 1"
id="perspective4713" />
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient4722"
gradientUnits="userSpaceOnUse"
x1="2.6229999"
y1="58.913601"
x2="90.977997"
y2="58.913601" />
<linearGradient
id="SVGID_2_"
gradientUnits="userSpaceOnUse"
x1="2.6229999"
y1="58.913601"
x2="90.977997"
y2="58.913601">
<stop
offset="0"
style="stop-color:#FFFFFF"
id="stop4704" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient4727"
gradientUnits="userSpaceOnUse"
x1="2.6229999"
y1="58.913601"
x2="90.977997"
y2="58.913601" />
</defs><sodipodi:namedview
inkscape:window-height="669"
inkscape:window-width="640"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:zoom="4.0639484"
inkscape:cx="48.330502"
inkscape:cy="59.548"
inkscape:window-x="394"
inkscape:window-y="149"
inkscape:current-layer="Layer_1" />
<g
id="g4731">
<path
style="opacity:0.25;fill-rule:evenodd"
id="path4697"
d="M 64.949,58.272 L 64.949,114.512 C 64.949,115.748 63.86,116.838 62.623,116.838 L 37.371,116.838 C 36.133,116.838 35.045,115.748 35.045,114.512 L 35.045,58.272 L 8.898,58.272 C 6.407,58.272 5.505,56.283 7.152,54.413 L 48.749,7.072 C 49.713,5.973 51.278,5.973 52.242,7.072 L 93.84,54.413 C 95.484,56.283 94.585,58.272 92.092,58.272 L 64.949,58.272 z"
clip-rule="evenodd" /><path
style="fill:url(#linearGradient4727);fill-rule:evenodd;stroke:#000000"
id="path4706"
d="M 61.253,55.643 L 61.253,111.883 C 61.253,113.119 60.165,114.209 58.927,114.209 L 33.675,114.209 C 32.437,114.209 31.349,113.119 31.349,111.883 L 31.349,55.643 L 5.203,55.643 C 2.713,55.643 1.81,53.654 3.457,51.784 L 45.054,4.442 C 46.017,3.343 47.583,3.343 48.546,4.442 L 90.146,51.783 C 91.789,53.653 90.89,55.642 88.398,55.642 L 61.253,55.642 L 61.253,55.643 z"
clip-rule="evenodd" /></g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="97.773px" height="118.167px" viewBox="0 0 97.773 118.167" enable-background="new 0 0 97.773 118.167"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.547,64.229V7.991c0-1.237,1.086-2.325,2.325-2.325h25.252
c1.236,0,2.326,1.088,2.326,2.325v56.238h26.146c2.491,0,3.392,1.99,1.746,3.861l-41.596,47.34c-0.965,1.099-2.531,1.099-3.496,0
L7.655,68.09c-1.645-1.871-0.745-3.861,1.746-3.861H36.547z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.547,64.229V7.991c0-1.237,1.086-2.325,2.325-2.325h25.252
c1.236,0,2.326,1.088,2.326,2.325v56.238h26.146c2.491,0,3.392,1.99,1.746,3.861l-41.596,47.34c-0.965,1.099-2.531,1.099-3.496,0
L7.655,68.09c-1.645-1.871-0.745-3.861,1.746-3.861H36.547z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.2305" y1="58.5679" x2="91.5854" y2="58.5679">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#194E6A" d="M32.956,61.836V5.598
c0-1.236,1.086-2.324,2.326-2.324h25.252c1.236,0,2.326,1.088,2.326,2.324v56.238h26.146c2.49,0,3.391,1.99,1.746,3.861
l-41.596,47.34c-0.965,1.1-2.531,1.1-3.496,0L4.063,65.698c-1.645-1.871-0.744-3.861,1.746-3.861H32.956z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="3.2305" y1="58.5679" x2="91.5854" y2="58.5679">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#194E6A" d="M32.956,61.836V5.598
c0-1.236,1.086-2.324,2.326-2.324h25.252c1.236,0,2.326,1.088,2.326,2.324v56.238h26.146c2.49,0,3.391,1.99,1.746,3.861
l-41.596,47.34c-0.965,1.1-2.531,1.1-3.496,0L4.063,65.698c-1.645-1.871-0.744-3.861,1.746-3.861H32.956z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="121.085px" height="95.54px" viewBox="0 0 121.085 95.54" enable-background="new 0 0 121.085 95.54" xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.925,64.1H9.687c-1.238,0-2.326-1.088-2.326-2.326V36.522
c0-1.237,1.088-2.325,2.326-2.325h56.239V8.049c0-2.493,1.988-3.391,3.861-1.748l47.34,41.599c1.098,0.965,1.098,2.529,0,3.494
l-47.34,41.598c-1.873,1.646-3.861,0.745-3.861-1.745V64.1z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.925,64.1H9.687c-1.238,0-2.326-1.088-2.326-2.326V36.522
c0-1.237,1.088-2.325,2.326-2.325h56.239V8.049c0-2.493,1.988-3.391,3.861-1.748l47.34,41.599c1.098,0.965,1.098,2.529,0,3.494
l-47.34,41.598c-1.873,1.646-3.861,0.745-3.861-1.745V64.1z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.77" y1="47.2549" x2="114.3589" y2="47.2549">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#194E6A" d="M62.334,61.707H6.096
c-1.238,0-2.326-1.088-2.326-2.326V34.129c0-1.236,1.088-2.324,2.326-2.324h56.239V5.657c0-2.492,1.988-3.391,3.861-1.748
l47.34,41.6c1.098,0.965,1.098,2.529,0,3.494L66.196,90.6c-1.873,1.645-3.861,0.744-3.861-1.746V61.707z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="3.77" y1="47.2549" x2="114.3589" y2="47.2549">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#194E6A" d="M62.334,61.707H6.096
c-1.238,0-2.326-1.088-2.326-2.326V34.129c0-1.236,1.088-2.324,2.326-2.324h56.239V5.657c0-2.492,1.988-3.391,3.861-1.748
l47.34,41.6c1.098,0.965,1.098,2.529,0,3.494L66.196,90.6c-1.873,1.645-3.861,0.744-3.861-1.746V61.707z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="121.085px" height="95.54px" viewBox="0 0 121.085 95.54" enable-background="new 0 0 121.085 95.54" xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M59.385,35.196h56.24c1.236,0,2.324,1.086,2.324,2.325v25.253
c0,1.235-1.088,2.325-2.324,2.325h-56.24v26.147c0,2.49-1.988,3.391-3.86,1.745L8.184,51.395c-1.097-0.963-1.097-2.53,0-3.495
l47.34-41.599c1.872-1.643,3.86-0.745,3.86,1.748V35.196z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M59.385,35.196h56.24c1.236,0,2.324,1.086,2.324,2.325v25.253
c0,1.235-1.088,2.325-2.324,2.325h-56.24v26.147c0,2.49-1.988,3.391-3.86,1.745L8.184,51.395c-1.097-0.963-1.097-2.53,0-3.495
l47.34-41.599c1.872-1.643,3.86-0.745,3.86,1.748V35.196z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.771" y1="47.2554" x2="114.3589" y2="47.2554">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#194E6A" d="M55.794,32.803h56.24
c1.237,0,2.325,1.086,2.325,2.326v25.252c0,1.236-1.088,2.326-2.325,2.326h-56.24v26.146c0,2.49-1.988,3.391-3.86,1.746
L4.593,49.002c-1.097-0.963-1.097-2.529,0-3.494l47.34-41.6c1.872-1.643,3.86-0.744,3.86,1.748V32.803z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="3.771" y1="47.2554" x2="114.3589" y2="47.2554">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#194E6A" d="M55.794,32.803h56.24
c1.237,0,2.325,1.086,2.325,2.326v25.252c0,1.236-1.088,2.326-2.325,2.326h-56.24v26.146c0,2.49-1.988,3.391-3.86,1.746
L4.593,49.002c-1.097-0.963-1.097-2.529,0-3.494l47.34-41.6c1.872-1.643,3.86-0.744,3.86,1.748V32.803z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="97.773px" height="118.167px" viewBox="0 0 97.773 118.167" enable-background="new 0 0 97.773 118.167"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.453,57.689v56.24c0,1.236-1.089,2.326-2.326,2.326H37.875
c-1.238,0-2.326-1.09-2.326-2.326v-56.24H9.402c-2.491,0-3.393-1.989-1.746-3.859L49.252,6.489c0.964-1.099,2.529-1.099,3.493,0
L94.344,53.83c1.644,1.87,0.745,3.859-1.748,3.859H65.453z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.453,57.689v56.24c0,1.236-1.089,2.326-2.326,2.326H37.875
c-1.238,0-2.326-1.09-2.326-2.326v-56.24H9.402c-2.491,0-3.393-1.989-1.746-3.859L49.252,6.489c0.964-1.099,2.529-1.099,3.493,0
L94.344,53.83c1.644,1.87,0.745,3.859-1.748,3.859H65.453z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.231" y1="58.5684" x2="91.5854" y2="58.5684">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#194E6A" d="M61.862,55.297v56.24
c0,1.236-1.09,2.326-2.326,2.326H34.284c-1.238,0-2.326-1.09-2.326-2.326v-56.24H5.811c-2.492,0-3.393-1.99-1.746-3.859
L45.661,4.096c0.965-1.098,2.529-1.098,3.494,0l41.598,47.342c1.645,1.869,0.746,3.859-1.748,3.859H61.862z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="3.231" y1="58.5684" x2="91.5854" y2="58.5684">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#194E6A" d="M61.862,55.297v56.24
c0,1.236-1.09,2.326-2.326,2.326H34.284c-1.238,0-2.326-1.09-2.326-2.326v-56.24H5.811c-2.492,0-3.393-1.99-1.746-3.859
L45.661,4.096c0.965-1.098,2.529-1.098,3.494,0l41.598,47.342c1.645,1.869,0.746,3.859-1.748,3.859H61.862z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="96.402px" height="118.167px" viewBox="0 0 96.402 118.167" enable-background="new 0 0 96.402 118.167"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.026,63.52V7.282c0-1.237,1.086-2.325,2.325-2.325h25.251
c1.236,0,2.326,1.088,2.326,2.325V63.52h26.146c2.491,0,3.392,1.99,1.746,3.861l-41.596,47.34c-0.965,1.1-2.531,1.1-3.496,0
L6.133,67.381C4.489,65.51,5.388,63.52,7.879,63.52H35.026z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.026,63.52V7.282c0-1.237,1.086-2.325,2.325-2.325h25.251
c1.236,0,2.326,1.088,2.326,2.325V63.52h26.146c2.491,0,3.392,1.99,1.746,3.861l-41.596,47.34c-0.965,1.1-2.531,1.1-3.496,0
L6.133,67.381C4.489,65.51,5.388,63.52,7.879,63.52H35.026z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.3823" y1="59.4331" x2="91.9873" y2="59.4331">
<stop offset="0" style="stop-color:#BEBEBE"/>
<stop offset="1" style="stop-color:#6A6A6A"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#414141" d="M33.191,62.711V6.313
c0-1.24,1.09-2.332,2.334-2.332h25.322c1.24,0,2.332,1.092,2.332,2.332v56.398h26.221c2.5,0,3.402,1.996,1.752,3.873
l-41.714,47.473c-0.967,1.104-2.537,1.104-3.506,0L4.218,66.584c-1.65-1.877-0.748-3.873,1.75-3.873H33.191z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="3.3823" y1="59.4331" x2="91.9873" y2="59.4331">
<stop offset="0" style="stop-color:#BEBEBE"/>
<stop offset="1" style="stop-color:#6A6A6A"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#414141" d="M33.191,62.711V6.313
c0-1.24,1.09-2.332,2.334-2.332h25.322c1.24,0,2.332,1.092,2.332,2.332v56.398h26.221c2.5,0,3.402,1.996,1.752,3.873
l-41.714,47.473c-0.967,1.104-2.537,1.104-3.506,0L4.218,66.584c-1.65-1.877-0.748-3.873,1.75-3.873H33.191z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="118.344px" height="94.854px" viewBox="0 0 118.344 94.854" enable-background="new 0 0 118.344 94.854"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M64.195,63.032H7.956c-1.237,0-2.325-1.088-2.325-2.326V35.454
c0-1.237,1.088-2.325,2.325-2.325h56.239V6.981c0-2.493,1.988-3.391,3.861-1.748l47.34,41.599c1.098,0.965,1.098,2.529,0,3.494
l-47.34,41.598c-1.873,1.646-3.861,0.745-3.861-1.745V63.032z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M64.195,63.032H7.956c-1.237,0-2.325-1.088-2.325-2.326V35.454
c0-1.237,1.088-2.325,2.325-2.325h56.239V6.981c0-2.493,1.988-3.391,3.861-1.748l47.34,41.599c1.098,0.965,1.098,2.529,0,3.494
l-47.34,41.598c-1.873,1.646-3.861,0.745-3.861-1.745V63.032z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="2.7588" y1="47.7617" x2="113.6621" y2="47.7617">
<stop offset="0" style="stop-color:#BEBEBE"/>
<stop offset="1" style="stop-color:#6A6A6A"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#414141" d="M61.49,62.254H5.092
c-1.241,0-2.333-1.09-2.333-2.332V34.599c0-1.24,1.092-2.332,2.333-2.332H61.49V6.046c0-2.5,1.994-3.4,3.872-1.754l47.475,41.717
c1.101,0.969,1.101,2.537,0,3.503L65.362,91.229c-1.878,1.65-3.872,0.748-3.872-1.75V62.254z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.7588" y1="47.7617" x2="113.6621" y2="47.7617">
<stop offset="0" style="stop-color:#BEBEBE"/>
<stop offset="1" style="stop-color:#6A6A6A"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#414141" d="M61.49,62.254H5.092
c-1.241,0-2.333-1.09-2.333-2.332V34.599c0-1.24,1.092-2.332,2.333-2.332H61.49V6.046c0-2.5,1.994-3.4,3.872-1.754l47.475,41.717
c1.101,0.969,1.101,2.537,0,3.503L65.362,91.229c-1.878,1.65-3.872,0.748-3.872-1.75V62.254z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="118.344px" height="94.854px" viewBox="0 0 118.344 94.854" enable-background="new 0 0 118.344 94.854"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M57.918,34.128h56.24c1.236,0,2.324,1.086,2.324,2.325v25.252
c0,1.235-1.088,2.325-2.324,2.325h-56.24v26.147c0,2.49-1.988,3.391-3.86,1.745L6.717,50.326c-1.097-0.963-1.097-2.529,0-3.494
l47.34-41.599c1.872-1.643,3.86-0.745,3.86,1.748V34.128z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M57.918,34.128h56.24c1.236,0,2.324,1.086,2.324,2.325v25.252
c0,1.235-1.088,2.325-2.324,2.325h-56.24v26.147c0,2.49-1.988,3.391-3.86,1.745L6.717,50.326c-1.097-0.963-1.097-2.529,0-3.494
l47.34-41.599c1.872-1.643,3.86-0.745,3.86,1.748V34.128z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="2.4966" y1="47.7617" x2="113.3994" y2="47.7617">
<stop offset="0" style="stop-color:#BEBEBE"/>
<stop offset="1" style="stop-color:#6A6A6A"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#414141" d="M54.668,33.269h56.4
c1.24,0,2.331,1.09,2.331,2.332v25.324c0,1.24-1.091,2.332-2.331,2.332h-56.4v26.223c0,2.498-1.994,3.4-3.871,1.75L3.322,49.512
c-1.1-0.964-1.1-2.535,0-3.503L50.797,4.292c1.877-1.646,3.871-0.746,3.871,1.754V33.269z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.4966" y1="47.7617" x2="113.3994" y2="47.7617">
<stop offset="0" style="stop-color:#BEBEBE"/>
<stop offset="1" style="stop-color:#6A6A6A"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#414141" d="M54.668,33.269h56.4
c1.24,0,2.331,1.09,2.331,2.332v25.324c0,1.24-1.091,2.332-2.331,2.332h-56.4v26.223c0,2.498-1.994,3.4-3.871,1.75L3.322,49.512
c-1.1-0.964-1.1-2.535,0-3.503L50.797,4.292c1.877-1.646,3.871-0.746,3.871,1.754V33.269z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="96.402px" height="118.167px" viewBox="0 0 96.402 118.167" enable-background="new 0 0 96.402 118.167"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M64.151,56.98v56.241c0,1.236-1.089,2.326-2.326,2.326H36.573
c-1.238,0-2.326-1.09-2.326-2.326V56.98H8.101c-2.491,0-3.393-1.989-1.746-3.859L47.951,5.78c0.964-1.099,2.529-1.099,3.493,0
l41.599,47.341c1.644,1.87,0.745,3.859-1.748,3.859H64.151z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M64.151,56.98v56.241c0,1.236-1.089,2.326-2.326,2.326H36.573
c-1.238,0-2.326-1.09-2.326-2.326V56.98H8.101c-2.491,0-3.393-1.989-1.746-3.859L47.951,5.78c0.964-1.099,2.529-1.099,3.493,0
l41.599,47.341c1.644,1.87,0.745,3.859-1.748,3.859H64.151z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.1616" y1="59.4341" x2="91.7666" y2="59.4341">
<stop offset="0" style="stop-color:#BEBEBE"/>
<stop offset="1" style="stop-color:#6A6A6A"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#414141" d="M61.958,56.153v56.401
c0,1.24-1.092,2.332-2.332,2.332H34.302c-1.242,0-2.332-1.092-2.332-2.332V56.153H5.749c-2.498,0-3.402-1.994-1.752-3.869
L45.712,4.808c0.967-1.102,2.537-1.102,3.504,0l41.717,47.477c1.648,1.875,0.746,3.869-1.754,3.869H61.958z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="3.1616" y1="59.4341" x2="91.7666" y2="59.4341">
<stop offset="0" style="stop-color:#BEBEBE"/>
<stop offset="1" style="stop-color:#6A6A6A"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#414141" d="M61.958,56.153v56.401
c0,1.24-1.092,2.332-2.332,2.332H34.302c-1.242,0-2.332-1.092-2.332-2.332V56.153H5.749c-2.498,0-3.402-1.994-1.752-3.869
L45.712,4.808c0.967-1.102,2.537-1.102,3.504,0l41.717,47.477c1.648,1.875,0.746,3.869-1.754,3.869H61.958z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="96.661px" height="119.096px" viewBox="0 0 96.661 119.096" enable-background="new 0 0 96.661 119.096"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.043,64.812V8.574c0-1.237,1.086-2.325,2.325-2.325h25.252
c1.236,0,2.326,1.088,2.326,2.325v56.238h26.146c2.491,0,3.392,1.99,1.746,3.861l-41.596,47.34c-0.965,1.099-2.531,1.099-3.496,0
L7.151,68.674c-1.645-1.871-0.745-3.861,1.746-3.861H36.043z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.043,64.812V8.574c0-1.237,1.086-2.325,2.325-2.325h25.252
c1.236,0,2.326,1.088,2.326,2.325v56.238h26.146c2.491,0,3.392,1.99,1.746,3.861l-41.596,47.34c-0.965,1.099-2.531,1.099-3.496,0
L7.151,68.674c-1.645-1.871-0.745-3.861,1.746-3.861H36.043z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="2.6235" y1="58.9136" x2="90.978" y2="58.9136">
<stop offset="0" style="stop-color:#FF897A"/>
<stop offset="1" style="stop-color:#FF3400"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#6F0000" d="M32.349,62.183V5.944
c0-1.237,1.086-2.325,2.324-2.325h25.252c1.236,0,2.326,1.088,2.326,2.325v56.238h26.146c2.492,0,3.393,1.99,1.746,3.861
l-41.596,47.34c-0.965,1.099-2.531,1.099-3.496,0L3.457,66.044c-1.645-1.871-0.746-3.861,1.746-3.861H32.349z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.6235" y1="58.9136" x2="90.978" y2="58.9136">
<stop offset="0" style="stop-color:#FF897A"/>
<stop offset="1" style="stop-color:#FF3400"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#6F0000" d="M32.349,62.183V5.944
c0-1.237,1.086-2.325,2.324-2.325h25.252c1.236,0,2.326,1.088,2.326,2.325v56.238h26.146c2.492,0,3.393,1.99,1.746,3.861
l-41.596,47.34c-0.965,1.099-2.531,1.099-3.496,0L3.457,66.044c-1.645-1.871-0.746-3.861,1.746-3.861H32.349z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="119.268px" height="96.873px" viewBox="0 0 119.268 96.873" enable-background="new 0 0 119.268 96.873"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.069,64.885H8.831c-1.238,0-2.326-1.088-2.326-2.326V37.307
c0-1.237,1.088-2.325,2.326-2.325h56.238V8.834c0-2.493,1.988-3.391,3.861-1.748l47.34,41.599c1.098,0.965,1.098,2.529,0,3.494
L68.93,93.776c-1.873,1.646-3.861,0.745-3.861-1.745V64.885z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.069,64.885H8.831c-1.238,0-2.326-1.088-2.326-2.326V37.307
c0-1.237,1.088-2.325,2.326-2.325h56.238V8.834c0-2.493,1.988-3.391,3.861-1.748l47.34,41.599c1.098,0.965,1.098,2.529,0,3.494
L68.93,93.776c-1.873,1.646-3.861,0.745-3.861-1.745V64.885z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="2.8101" y1="47.8018" x2="113.3979" y2="47.8018">
<stop offset="0" style="stop-color:#FF897A"/>
<stop offset="1" style="stop-color:#FF3400"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#6F0000" d="M61.375,62.255H5.136
c-1.238,0-2.326-1.088-2.326-2.326V34.677c0-1.237,1.088-2.325,2.326-2.325h56.239V6.204c0-2.493,1.988-3.391,3.86-1.748
l47.34,41.599c1.098,0.965,1.098,2.529,0,3.494l-47.34,41.598c-1.872,1.646-3.86,0.745-3.86-1.745V62.255z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.8101" y1="47.8018" x2="113.3979" y2="47.8018">
<stop offset="0" style="stop-color:#FF897A"/>
<stop offset="1" style="stop-color:#FF3400"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#6F0000" d="M61.375,62.255H5.136
c-1.238,0-2.326-1.088-2.326-2.326V34.677c0-1.237,1.088-2.325,2.326-2.325h56.239V6.204c0-2.493,1.988-3.391,3.86-1.748
l47.34,41.599c1.098,0.965,1.098,2.529,0,3.494l-47.34,41.598c-1.872,1.646-3.86,0.745-3.86-1.745V62.255z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="119.268px" height="96.873px" viewBox="0 0 119.268 96.873" enable-background="new 0 0 119.268 96.873"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M58.528,35.98h56.241c1.236,0,2.324,1.086,2.324,2.325v25.253
c0,1.235-1.088,2.325-2.324,2.325H58.528v26.147c0,2.49-1.988,3.391-3.86,1.745L7.328,52.179c-1.097-0.963-1.097-2.529,0-3.494
l47.34-41.599c1.872-1.643,3.86-0.745,3.86,1.748V35.98z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M58.528,35.98h56.241c1.236,0,2.324,1.086,2.324,2.325v25.253
c0,1.235-1.088,2.325-2.324,2.325H58.528v26.147c0,2.49-1.988,3.391-3.86,1.745L7.328,52.179c-1.097-0.963-1.097-2.529,0-3.494
l47.34-41.599c1.872-1.643,3.86-0.745,3.86,1.748V35.98z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="2.8105" y1="47.8018" x2="113.3989" y2="47.8018">
<stop offset="0" style="stop-color:#FF897A"/>
<stop offset="1" style="stop-color:#FF3400"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#6F0000" d="M54.833,33.351h56.241
c1.237,0,2.325,1.086,2.325,2.325v25.253c0,1.235-1.088,2.325-2.325,2.325H54.833v26.147c0,2.49-1.988,3.391-3.859,1.745
L3.633,49.549c-1.097-0.963-1.097-2.529,0-3.494L50.974,4.456c1.871-1.643,3.859-0.745,3.859,1.748V33.351z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.8105" y1="47.8018" x2="113.3989" y2="47.8018">
<stop offset="0" style="stop-color:#FF897A"/>
<stop offset="1" style="stop-color:#FF3400"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#6F0000" d="M54.833,33.351h56.241
c1.237,0,2.325,1.086,2.325,2.325v25.253c0,1.235-1.088,2.325-2.325,2.325H54.833v26.147c0,2.49-1.988,3.391-3.859,1.745
L3.633,49.549c-1.097-0.963-1.097-2.529,0-3.494L50.974,4.456c1.871-1.643,3.859-0.745,3.859,1.748V33.351z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="96.661px" height="119.096px" viewBox="0 0 96.661 119.096" enable-background="new 0 0 96.661 119.096"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M64.949,58.272v56.24c0,1.236-1.089,2.326-2.326,2.326H37.371
c-1.238,0-2.326-1.09-2.326-2.326v-56.24H8.898c-2.491,0-3.393-1.989-1.746-3.859L48.749,7.072c0.964-1.099,2.529-1.099,3.493,0
L93.84,54.413c1.644,1.87,0.745,3.859-1.748,3.859H64.949z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M64.949,58.272v56.24c0,1.236-1.089,2.326-2.326,2.326H37.371
c-1.238,0-2.326-1.09-2.326-2.326v-56.24H8.898c-2.491,0-3.393-1.989-1.746-3.859L48.749,7.072c0.964-1.099,2.529-1.099,3.493,0
L93.84,54.413c1.644,1.87,0.745,3.859-1.748,3.859H64.949z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="2.623" y1="58.9136" x2="90.978" y2="58.9136">
<stop offset="0" style="stop-color:#FF897A"/>
<stop offset="1" style="stop-color:#FF3400"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#6F0000" d="M61.253,55.643v56.24
c0,1.236-1.088,2.326-2.326,2.326H33.675c-1.238,0-2.326-1.09-2.326-2.326v-56.24H5.203c-2.49,0-3.393-1.989-1.746-3.859
L45.054,4.442c0.963-1.099,2.529-1.099,3.492,0l41.6,47.341c1.643,1.87,0.744,3.859-1.748,3.859H61.253z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.623" y1="58.9136" x2="90.978" y2="58.9136">
<stop offset="0" style="stop-color:#FF897A"/>
<stop offset="1" style="stop-color:#FF3400"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#6F0000" d="M61.253,55.643v56.24
c0,1.236-1.088,2.326-2.326,2.326H33.675c-1.238,0-2.326-1.09-2.326-2.326v-56.24H5.203c-2.49,0-3.393-1.989-1.746-3.859
L45.054,4.442c0.963-1.099,2.529-1.099,3.492,0l41.6,47.341c1.643,1.87,0.744,3.859-1.748,3.859H61.253z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="97.774px" height="116.878px" viewBox="0 0 97.774 116.878" enable-background="new 0 0 97.774 116.878"
xml:space="preserve">
<g>
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" d="M34.752,61.478V5.239
c0-1.237,1.086-2.325,2.325-2.325H62.33c1.236,0,2.326,1.088,2.326,2.325v56.239h26.146c2.491,0,3.392,1.99,1.746,3.861
l-41.596,47.34c-0.965,1.098-2.531,1.098-3.496,0L5.86,65.339c-1.645-1.871-0.745-3.861,1.746-3.861H34.752z"/>
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" d="M34.752,61.478V5.239
c0-1.237,1.086-2.325,2.325-2.325H62.33c1.236,0,2.326,1.088,2.326,2.325v56.239h26.146c2.491,0,3.392,1.99,1.746,3.861
l-41.596,47.34c-0.965,1.098-2.531,1.098-3.496,0L5.86,65.339c-1.645-1.871-0.745-3.861,1.746-3.861H34.752z"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="116.463px" height="93.249px" viewBox="0 0 116.463 93.249" enable-background="new 0 0 116.463 93.249"
xml:space="preserve">
<g>
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" d="M61.819,60.847H5.581
c-1.238,0-2.326-1.088-2.326-2.326V33.268c0-1.237,1.088-2.325,2.326-2.325h56.238V4.795c0-2.493,1.988-3.391,3.861-1.748
l47.34,41.599c1.098,0.965,1.098,2.529,0,3.495L65.68,89.738c-1.873,1.646-3.861,0.745-3.861-1.745V60.847z"/>
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" d="M61.819,60.847H5.581
c-1.238,0-2.326-1.088-2.326-2.326V33.268c0-1.237,1.088-2.325,2.326-2.325h56.238V4.795c0-2.493,1.988-3.391,3.861-1.748
l47.34,41.599c1.098,0.965,1.098,2.529,0,3.495L65.68,89.738c-1.873,1.646-3.861,0.745-3.861-1.745V60.847z"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="116.463px" height="93.249px" viewBox="0 0 116.463 93.249" enable-background="new 0 0 116.463 93.249"
xml:space="preserve">
<g>
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" d="M55.279,31.942h56.24
c1.236,0,2.324,1.086,2.324,2.325v25.253c0,1.235-1.088,2.325-2.324,2.325h-56.24v26.147c0,2.49-1.988,3.391-3.86,1.745
L4.078,48.141c-1.097-0.963-1.097-2.53,0-3.495l47.34-41.599c1.872-1.643,3.86-0.745,3.86,1.748V31.942z"/>
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" d="M55.279,31.942h56.24
c1.236,0,2.324,1.086,2.324,2.325v25.253c0,1.235-1.088,2.325-2.324,2.325h-56.24v26.147c0,2.49-1.988,3.391-3.86,1.745
L4.078,48.141c-1.097-0.963-1.097-2.53,0-3.495l47.34-41.599c1.872-1.643,3.86-0.745,3.86,1.748V31.942z"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="97.774px" height="116.878px" viewBox="0 0 97.774 116.878" enable-background="new 0 0 97.774 116.878"
xml:space="preserve">
<g>
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" d="M63.658,54.937v56.24
c0,1.236-1.089,2.326-2.326,2.326H36.08c-1.238,0-2.326-1.09-2.326-2.326v-56.24H7.607c-2.491,0-3.393-1.989-1.746-3.859
L47.458,3.737c0.964-1.099,2.529-1.099,3.493,0l41.599,47.341c1.644,1.87,0.745,3.859-1.748,3.859H63.658z"/>
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" d="M63.658,54.937v56.24
c0,1.236-1.089,2.326-2.326,2.326H36.08c-1.238,0-2.326-1.09-2.326-2.326v-56.24H7.607c-2.491,0-3.393-1.989-1.746-3.859
L47.458,3.737c0.964-1.099,2.529-1.099,3.493,0l41.599,47.341c1.644,1.87,0.745,3.859-1.748,3.859H63.658z"/>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<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"
version="1.0"
id="Layer_1"
x="0px"
y="0px"
width="128.846px"
height="122.544px"
viewBox="0 0 128.846 122.544"
enable-background="new 0 0 128.846 122.544"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="red_star_rnd.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata8407"><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><defs
id="defs8405"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 61.271999 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="128.84599 : 61.271999 : 1"
inkscape:persp3d-origin="64.422997 : 40.848 : 1"
id="perspective8409" />
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_1_"
id="linearGradient8932"
gradientUnits="userSpaceOnUse"
x1="2.4384999"
y1="60.637699"
x2="123.3472"
y2="60.637699" /><linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient8934"
gradientUnits="userSpaceOnUse"
x1="2.4384999"
y1="60.637699"
x2="123.3472"
y2="60.637699" />
<linearGradient
id="SVGID_1_"
gradientUnits="userSpaceOnUse"
x1="2.4384999"
y1="60.637699"
x2="123.3472"
y2="60.637699">
<stop
offset="0"
style="stop-color:#FF897A"
id="stop8391" />
<stop
offset="1"
style="stop-color:#FF3400"
id="stop8393" />
</linearGradient>
<linearGradient
id="SVGID_2_"
gradientUnits="userSpaceOnUse"
x1="2.4384999"
y1="60.637699"
x2="123.3472"
y2="60.637699">
<stop
offset="0"
style="stop-color:#FF897A"
id="stop8398" />
<stop
offset="1"
style="stop-color:#FF3400"
id="stop8400" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient8943"
gradientUnits="userSpaceOnUse"
x1="2.4384999"
y1="60.637699"
x2="123.3472"
y2="60.637699" /><linearGradient
inkscape:collect="always"
xlink:href="#SVGID_1_"
id="linearGradient8946"
gradientUnits="userSpaceOnUse"
x1="2.4384999"
y1="60.637699"
x2="123.3472"
y2="60.637699" />
</defs><sodipodi:namedview
inkscape:window-height="970"
inkscape:window-width="1680"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:zoom="3.9496018"
inkscape:cx="14.797741"
inkscape:cy="61.271999"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:current-layer="Layer_1" />
<g
id="g8950">
<path
style="opacity:0.25;fill-rule:evenodd"
id="path8384"
d="M 66.588,97.681 L 36.828,119.302 C 31.108,123.457 25.637,119.483 27.819,112.756 L 39.187,77.774 L 9.43,56.153 C 3.71,51.996 5.799,45.565 12.87,45.563 L 49.653,45.562 L 61.02,10.582 C 63.205,3.855 69.967,3.855 72.154,10.582 L 83.522,45.562 L 120.303,45.563 C 127.374,45.565 129.465,51.996 123.744,56.153 L 93.989,77.774 L 105.352,112.756 C 107.539,119.483 102.066,123.457 96.345,119.302 L 66.588,97.681 z"
clip-rule="evenodd" /><path
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;fill-opacity:1;stroke-opacity:1"
id="path8395"
d="M 62.894,95.051 L 33.134,116.672 C 27.413,120.827 21.943,116.853 24.124,110.126 L 35.493,75.144 L 5.736,53.523 C 0.015,49.366 2.105,42.935 9.175,42.933 L 45.958,42.932 L 57.325,7.952 C 59.511,1.225 66.272,1.225 68.46,7.952 L 79.827,42.932 L 116.608,42.933 C 123.68,42.935 125.77,49.366 120.049,53.523 L 90.294,75.144 L 101.657,110.126 C 103.843,116.853 98.37,120.827 92.649,116.672 L 62.894,95.051 z"
clip-rule="evenodd" /></g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<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"
version="1.0"
id="Layer_1"
x="0px"
y="0px"
width="128.846px"
height="122.544px"
viewBox="0 0 128.846 122.544"
enable-background="new 0 0 128.846 122.544"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="red_star.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata7779"><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><defs
id="defs7777"><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 61.271999 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="128.84599 : 61.271999 : 1"
inkscape:persp3d-origin="64.422997 : 40.848 : 1"
id="perspective7781" />
<linearGradient
inkscape:collect="always"
xlink:href="#SVGID_1_"
id="linearGradient8304"
gradientUnits="userSpaceOnUse"
x1="2.8438001"
y1="60.637699"
x2="122.9438"
y2="60.637699" /><linearGradient
inkscape:collect="always"
xlink:href="#SVGID_2_"
id="linearGradient8306"
gradientUnits="userSpaceOnUse"
x1="2.8438001"
y1="60.637699"
x2="122.9438"
y2="60.637699" />
<linearGradient
id="SVGID_1_"
gradientUnits="userSpaceOnUse"
x1="2.8438001"
y1="60.637699"
x2="122.9438"
y2="60.637699">
<stop
offset="0"
style="stop-color:#FF897A"
id="stop7763" />
<stop
offset="1"
style="stop-color:#FF3400"
id="stop7765" />
</linearGradient>
<linearGradient
id="SVGID_2_"
gradientUnits="userSpaceOnUse"
x1="2.8438001"
y1="60.637699"
x2="122.9438"
y2="60.637699">
<stop
offset="0"
style="stop-color:#FF897A"
id="stop7770" />
<stop
offset="1"
style="stop-color:#FF3400"
id="stop7772" />
</linearGradient>
</defs><sodipodi:namedview
inkscape:window-height="970"
inkscape:window-width="1680"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:zoom="3.9496018"
inkscape:cx="14.797741"
inkscape:cy="61.271999"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:current-layer="Layer_1" />
<g
id="g8318">
<polygon
style="opacity:0.25;fill-rule:evenodd"
id="polygon7756"
points="103.702,120.378 66.588,93.416 29.475,120.378 43.65,76.75 6.538,49.786 52.411,49.784 66.588,6.157 80.766,49.784 126.637,49.786 89.526,76.75 103.702,120.378 "
clip-rule="evenodd" /><polygon
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-opacity:1;fill-opacity:1"
id="polygon7767"
points="100.006,117.749 62.895,90.786 25.779,117.749 39.955,74.121 2.844,47.156 48.717,47.154 62.895,3.527 77.071,47.154 122.944,47.156 85.831,74.121 100.006,117.749 "
clip-rule="evenodd" /></g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="129.314px" height="122.966px" viewBox="0 0 129.314 122.966" enable-background="new 0 0 129.314 122.966"
xml:space="preserve">
<g>
<g opacity="0.25">
<path fill-rule="evenodd" clip-rule="evenodd" d="M66.77,97.773l-29.76,21.621c-5.72,4.155-11.191,0.181-9.009-6.546L39.37,77.866
L9.612,56.245c-5.72-4.157-3.631-10.588,3.44-10.59l36.783-0.001l11.367-34.98c2.185-6.727,8.947-6.727,11.134,0l11.368,34.98
l36.781,0.001c7.071,0.002,9.162,6.433,3.441,10.59L94.17,77.866l11.363,34.982c2.187,6.727-3.286,10.701-9.007,6.546
L66.77,97.773z"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M66.77,97.773l-29.76,21.621c-5.72,4.155-11.191,0.181-9.009-6.546L39.37,77.866
L9.612,56.245c-5.72-4.157-3.631-10.588,3.44-10.59l36.783-0.001l11.367-34.98c2.185-6.727,8.947-6.727,11.134,0l11.368,34.98
l36.781,0.001c7.071,0.002,9.162,6.433,3.441,10.59L94.17,77.866l11.363,34.982c2.187,6.727-3.286,10.701-9.007,6.546
L66.77,97.773z"/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="2.7236" y1="60.9683" x2="123.6333" y2="60.9683">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#194E6A" d="M63.178,95.382l-29.76,21.621
c-5.719,4.154-11.191,0.18-9.008-6.547l11.367-34.982L6.02,53.853c-5.719-4.156-3.631-10.588,3.441-10.59h36.783l11.367-34.98
c2.184-6.727,8.947-6.727,11.133,0l11.369,34.98h36.781c7.07,0.002,9.162,6.434,3.441,10.59L90.579,75.474l11.363,34.982
c2.188,6.727-3.285,10.701-9.006,6.547L63.178,95.382z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.7236" y1="60.9683" x2="123.6333" y2="60.9683">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#194E6A" d="M63.178,95.382l-29.76,21.621
c-5.719,4.154-11.191,0.18-9.008-6.547l11.367-34.982L6.02,53.853c-5.719-4.156-3.631-10.588,3.441-10.59h36.783l11.367-34.98
c2.184-6.727,8.947-6.727,11.133,0l11.369,34.98h36.781c7.07,0.002,9.162,6.434,3.441,10.59L90.579,75.474l11.363,34.982
c2.188,6.727-3.285,10.701-9.006,6.547L63.178,95.382z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="129.314px" height="122.966px" viewBox="0 0 129.314 122.966" enable-background="new 0 0 129.314 122.966"
xml:space="preserve">
<g>
<g opacity="0.25">
<polygon fill-rule="evenodd" clip-rule="evenodd" points="103.883,120.471 66.771,93.508 29.657,120.471 43.833,76.843
6.72,49.878 52.593,49.876 66.771,6.249 80.948,49.876 126.82,49.878 89.708,76.843 "/>
<polygon fill-rule="evenodd" clip-rule="evenodd" points="103.883,120.471 66.771,93.508 29.657,120.471 43.833,76.843
6.72,49.878 52.593,49.876 66.771,6.249 80.948,49.876 126.82,49.878 89.708,76.843 "/>
</g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.1284" y1="60.9678" x2="123.228" y2="60.9678">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" stroke="#194E6A" points="100.292,118.078 63.179,91.115
26.066,118.078 40.242,74.451 3.128,47.486 49.001,47.484 63.179,3.857 77.357,47.484 123.228,47.486 86.117,74.451 "/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="3.1284" y1="60.9678" x2="123.228" y2="60.9678">
<stop offset="0" style="stop-color:#7CD4FF"/>
<stop offset="1" style="stop-color:#3777AE"/>
</linearGradient>
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_2_)" stroke="#194E6A" points="100.292,118.078 63.179,91.115
26.066,118.078 40.242,74.451 3.128,47.486 49.001,47.484 63.179,3.857 77.357,47.484 123.228,47.486 86.117,74.451 "/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="125.75px" height="122.047px" viewBox="0 0 125.75 122.047" enable-background="new 0 0 125.75 122.047"
xml:space="preserve">
<g>
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" d="M63.193,95.206l-29.76,21.621
c-5.72,4.155-11.191,0.181-9.009-6.546l11.368-34.982L6.035,53.678c-5.72-4.157-3.631-10.588,3.44-10.59l36.783-0.001l11.367-34.98
c2.185-6.727,8.947-6.727,11.133,0l11.368,34.98l36.781,0.001c7.071,0.002,9.162,6.433,3.441,10.59L90.593,75.298l11.363,34.982
c2.187,6.727-3.286,10.701-9.007,6.546L63.193,95.206z"/>
<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" d="M63.193,95.206l-29.76,21.621
c-5.72,4.155-11.191,0.181-9.009-6.546l11.368-34.982L6.035,53.678c-5.72-4.157-3.631-10.588,3.44-10.59l36.783-0.001l11.367-34.98
c2.185-6.727,8.947-6.727,11.133,0l11.368,34.98l36.781,0.001c7.071,0.002,9.162,6.433,3.441,10.59L90.593,75.298l11.363,34.982
c2.187,6.727-3.286,10.701-9.007,6.546L63.193,95.206z"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="125.75px" height="122.047px" viewBox="0 0 125.75 122.047" enable-background="new 0 0 125.75 122.047"
xml:space="preserve">
<g>
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" points="100.306,117.904 63.194,90.941
26.08,117.904 40.255,74.275 3.143,47.311 49.016,47.309 63.194,3.682 77.371,47.309 123.243,47.311 86.13,74.275 "/>
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#595959" points="100.306,117.904 63.194,90.941
26.08,117.904 40.255,74.275 3.143,47.311 49.016,47.309 63.194,3.682 77.371,47.309 123.243,47.311 86.13,74.275 "/>
</g>
</svg>
......@@ -54,6 +54,8 @@ static QString tIwb = "iwb";
static QString tMeta = "meta";
static QString tPage = "page";
static QString tPageset = "pageset";
static QString tG = "g";
static QString tSwitch = "switch";
static QString tPolygon = "polygon";
static QString tPolyline = "polyline";
static QString tRect = "rect";
......@@ -64,7 +66,7 @@ static QString tTspan = "tspan";
static QString tBreak = "tbreak";
static QString tImage = "image";
static QString tFlash = "flash";
static QString tAudio = "audio";
static QString tAudio = "a";
static QString tVideo = "video";
//attribute names definition
......@@ -163,6 +165,31 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parse()
return result;
}
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseGSection(const QDomElement &element)
{
QDomElement currentSvgElement = element.firstChildElement();
while (!currentSvgElement.isNull()) {
if (!parseSvgElement(currentSvgElement))
return false;
currentSvgElement = currentSvgElement.nextSiblingElement();
}
return true;
}
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgSwitchSection(const QDomElement &element)
{
QDomElement currentSvgElement = element.firstChildElement();
while (!currentSvgElement.isNull()) {
if (parseSvgElement(currentSvgElement))
return true;
}
return false;
}
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgRect(const QDomElement &element)
{
qreal x1 = element.attribute(aX).toDouble();
......@@ -177,7 +204,12 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgRect(const QDomElement &elem
QColor fillColor = !textFillColor.isNull() ? colorFromString(textFillColor) : QColor();
QColor strokeColor = !textStrokeColor.isNull() ? colorFromString(textStrokeColor) : QColor();
int strokeWidth = !textStrokeWidth.isNull() ? textStrokeWidth.toInt() : 0;
int strokeWidth = textStrokeWidth.toInt();
x1 -= strokeWidth/2;
y1 -= strokeWidth/2;
width += strokeWidth;
height += strokeWidth;
//init svg generator with temp file
QSvgGenerator *generator = createSvgGenerator(width, height);
......@@ -206,13 +238,13 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgRect(const QDomElement &elem
UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
QTransform transform;
QString textTransform = element.attribute(aTransform);
bool hastransform = false;
svgItem->resetTransform();
if (!textTransform.isNull()) {
transform = transformFromString(textTransform);
hastransform = true;
transform = transformFromString(textTransform, svgItem);
}
repositionSvgItem(svgItem, width, height, x1, y1, hastransform, transform);
repositionSvgItem(svgItem, width, height, x1, y1, transform);
hashSceneItem(element, svgItem);
delete generator;
......@@ -251,13 +283,14 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgEllipse(const QDomElement &e
UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
QTransform transform;
QString textTransform = element.attribute(aTransform);
bool hastransform = false;
svgItem->resetTransform();
if (!textTransform.isNull()) {
transform = transformFromString(textTransform);
hastransform = true;
transform = transformFromString(textTransform, svgItem);
}
repositionSvgItem(svgItem, rx * 2, ry * 2, cx - rx , cy - ry, hastransform, transform);
repositionSvgItem(svgItem, rx * 2, ry * 2, cx - 2*rx, cy+ry, transform);
hashSceneItem(element, svgItem);
delete generator;
......@@ -308,7 +341,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolygon(const QDomElement &e
QColor strokeColor = !strokeColorText.isEmpty() ? colorFromString(strokeColorText) : QColor();
QColor fillColor = !fillColorText.isEmpty() ? colorFromString(fillColorText) : QColor();
int strokeWidth = strokeWidthText.toInt() > 0 ? strokeWidthText.toInt() : 0;
int strokeWidth = strokeWidthText.toDouble();
QPen pen;
pen.setColor(strokeColor);
......@@ -334,12 +367,12 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolygon(const QDomElement &e
UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
QTransform transform;
QString textTransform = element.attribute(aTransform);
bool hastransform = false;
svgItem->resetTransform();
if (!textTransform.isNull()) {
transform = transformFromString(textTransform);
hastransform = true;
transform = transformFromString(textTransform, svgItem);
}
repositionSvgItem(svgItem, width + 10, height + 10, x1 - 5, y1 - 5, hastransform, transform);
repositionSvgItem(svgItem, width +strokeWidth, height + strokeWidth, x1 - strokeWidth/2 + transform.m31(), y1 + strokeWidth/2 + transform.m32(), transform);
hashSceneItem(element, svgItem);
delete generator;
......@@ -389,7 +422,10 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolyline(const QDomElement &
QString strokeWidthText = element.attribute(aStrokewidth);
QColor strokeColor = !strokeColorText.isEmpty() ? colorFromString(strokeColorText) : QColor();
int strokeWidth = strokeWidthText.toInt() > 0 ? strokeWidthText.toInt() : 0;
int strokeWidth = strokeWidthText.toDouble();
width += strokeWidth;
height += strokeWidth;
QPen pen;
pen.setColor(strokeColor);
......@@ -400,7 +436,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolyline(const QDomElement &
painter.begin(generator); //drawing to svg tmp file
painter.translate(pen.widthF() / 2 - x1, pen.widthF() / 2 - y1);
painter.translate(pen.widthF()/2 - x1, pen.widthF()/2- y1);
painter.setPen(pen);
painter.drawPolyline(polygon);
......@@ -410,12 +446,12 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolyline(const QDomElement &
UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
QTransform transform;
QString textTransform = element.attribute(aTransform);
bool hastransform = false;
svgItem->resetTransform();
if (!textTransform.isNull()) {
transform = transformFromString(textTransform);
hastransform = true;
transform = transformFromString(textTransform, svgItem);
}
repositionSvgItem(svgItem, width + 10, height + 10, x1 - 5, y1 - 5, hastransform, transform);
repositionSvgItem(svgItem, width +strokeWidth, height + strokeWidth, x1 + transform.m31() - strokeWidth/2, y1 + transform.m32() + strokeWidth/2, transform);
hashSceneItem(element, svgItem);
delete generator;
......@@ -539,7 +575,6 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgText(const QDomElement &elem
// remember if text area has transform
// QString transformString;
QTransform transform = fontTransform;
bool hasTransform = !fontTransform.isIdentity();
QRectF lastDrawnTextBoundingRect;
//parse text area tags
......@@ -554,7 +589,8 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgText(const QDomElement &elem
//add resulting svg file to scene
UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
repositionSvgItem(svgItem, width, height, x, y, hasTransform, transform);
svgItem->resetTransform();
repositionSvgItem(svgItem, width, height, x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, svgItem);
delete generator;
......@@ -661,10 +697,10 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgTextarea(const QDomElement &
QTransform transform;
QString textTransform = element.attribute(aTransform);
bool hastransform = false;
svgItem->resetTransform();
if (!textTransform.isNull()) {
transform = transformFromString(textTransform);
hastransform = true;
transform = transformFromString(textTransform, svgItem);
}
//by default all the textAreas are not editable
......@@ -673,7 +709,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgTextarea(const QDomElement &
curDelegate->setEditable(false);
}
repositionSvgItem(svgItem, width, height, x, y, hastransform, transform);
repositionSvgItem(svgItem, width, height, x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, svgItem);
return true;
......@@ -705,12 +741,12 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgImage(const QDomElement &ele
UBGraphicsPixmapItem *pixItem = mCurrentScene->addPixmap(pix);
QTransform transform;
QString textTransform = element.attribute(aTransform);
bool hastransform = false;
pixItem->resetTransform();
if (!textTransform.isNull()) {
transform = transformFromString(textTransform);
hastransform = true;
transform = transformFromString(textTransform, pixItem);
}
repositionSvgItem(pixItem, width, height, x, y, hastransform, transform);
repositionSvgItem(pixItem, width, height, x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, pixItem);
return true;
......@@ -747,10 +783,12 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgFlash(const QDomElement &ele
QTransform transform;
QString textTransform = element.attribute(aTransform);
flashItem->resetTransform();
if (!textTransform.isNull()) {
transform = transformFromString(textTransform);
transform = transformFromString(textTransform, flashItem);
}
repositionSvgItem(flashItem, width, height, x, y, true, transform);
repositionSvgItem(flashItem, width, height, x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, flashItem);
return true;
......@@ -758,32 +796,42 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgFlash(const QDomElement &ele
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgAudio(const QDomElement &element)
{
qreal x = element.attribute(aX).toDouble();
qreal y = element.attribute(aY).toDouble();
qreal width = element.attribute(aWidth).toDouble();
qreal height = element.attribute(aHeight).toDouble();
QDomElement parentOfAudio = element.firstChild().toElement();
qreal x = parentOfAudio.attribute(aX).toDouble();
qreal y = parentOfAudio.attribute(aY).toDouble();
QString itemRefPath = element.attribute(aHref);
QUrl urlPath;
QUrl concreteUrl;
if (!itemRefPath.isNull()) {
QString videoPath = pwdContent + "/" + itemRefPath;
if (!QFile::exists(videoPath)) {
QString audioPath = pwdContent + "/" + itemRefPath;
if (!QFile::exists(audioPath)) {
qDebug() << "can't load file" << pwdContent + "/" + itemRefPath << "maybe file corrupted";
return false;
}
urlPath = QUrl::fromLocalFile(videoPath);
concreteUrl = QUrl::fromLocalFile(audioPath);
}
UBGraphicsAudioItem *audioItem = mCurrentScene->addAudio(urlPath, false);
QUuid uuid = QUuid::createUuid();
#ifdef Q_WS_X11
concreteUrl = QUrl::fromLocalFile(mCurrentScene->document()->persistencePath() + "/" + UBPersistenceManager::persistenceManager()
->addAudioFileToDocument(mCurrentScene->document(), concreteUrl.toLocalFile(), uuid));
#else
concreteUrl = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager()
->addAudioFileToDocument(mCurrentScene->document(), concreteUrl.toLocalFile(), uuid));
#endif
UBGraphicsAudioItem *audioItem = mCurrentScene->addAudio(concreteUrl, false);
QTransform transform;
QString textTransform = element.attribute(aTransform);
bool hastransform = false;
QString textTransform = parentOfAudio.attribute(aTransform);
audioItem->resetTransform();
if (!textTransform.isNull()) {
transform = transformFromString(textTransform);
hastransform = true;
transform = transformFromString(textTransform, audioItem);
}
repositionSvgItem(audioItem, width, height, x, y, hastransform, transform);
repositionSvgItem(audioItem, audioItem->boundingRect().width(), audioItem->boundingRect().height(), x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, audioItem);
return true;
......@@ -795,31 +843,38 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgVideo(const QDomElement &ele
if (parseSvgFlash(element)) return true;
else return false;
}
qreal x = element.attribute(aX).toDouble();
qreal y = element.attribute(aY).toDouble();
qreal width = element.attribute(aWidth).toDouble();
qreal height = element.attribute(aHeight).toDouble();
QUrl urlPath;
QUrl concreteUrl;
if (!itemRefPath.isNull()) {
QString videoPath = pwdContent + "/" + itemRefPath;
if (!QFile::exists(videoPath)) {
qDebug() << "can't load file" << pwdContent + "/" + itemRefPath << "maybe file corrupted";
return false;
}
urlPath = QUrl::fromLocalFile(videoPath);
concreteUrl = QUrl::fromLocalFile(videoPath);
}
UBGraphicsVideoItem *videoItem = mCurrentScene->addVideo(urlPath, false);
QUuid uuid = QUuid::createUuid();
#ifdef Q_WS_X11
concreteUrl = QUrl::fromLocalFile(mCurrentScene->document()->persistencePath() + "/" + UBPersistenceManager::persistenceManager()
->addVideoFileToDocument(mCurrentScene->document(), concreteUrl.toLocalFile(), uuid));
#else
concreteUrl = QUrl::fromLocalFile(UBPersistenceManager::persistenceManager()
->addVideoFileToDocument(mCurrentScene->document(), concreteUrl.toLocalFile(), uuid));
#endif
UBGraphicsVideoItem *videoItem = mCurrentScene->addVideo(concreteUrl, false);
QTransform transform;
QString textTransform = element.attribute(aTransform);
bool hastransform = false;
videoItem->resetTransform();
if (!textTransform.isNull()) {
transform = transformFromString(textTransform);
hastransform = true;
transform = transformFromString(textTransform, videoItem);
}
repositionSvgItem(videoItem, width, height, x - 5, y - 5, hastransform, transform);
repositionSvgItem(videoItem, videoItem->boundingRect().width(), videoItem->boundingRect().height(), x + transform.m31(), y + transform.m32(), transform);
hashSceneItem(element, videoItem);
return true;
......@@ -849,16 +904,18 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgElement(const QDomElement &p
return false;
}
if (tagName == tRect && !parseSvgRect(parent)) return false;
else if (tagName == tEllipse && !parseSvgEllipse(parent)) return false;
else if (tagName == tPolygon && !parseSvgPolygon(parent)) return false;
else if (tagName == tPolyline && !parseSvgPolyline(parent)) return false;
else if (tagName == tText && !parseSvgText(parent)) return false;
else if (tagName == tTextarea && !parseSvgTextarea(parent)) return false;
else if (tagName == tImage && !parseSvgImage(parent)) return false;
else if (tagName == tFlash && !parseSvgFlash(parent)) return false;
else if (tagName == tAudio && !parseSvgAudio(parent)) return false;
else if (tagName == tVideo && !parseSvgVideo(parent)) return false;
if (tagName == tG && !parseGSection(parent)) return false;
else if (tagName == tSwitch && !parseSvgSwitchSection(parent)) return false;
else if (tagName == tRect && !parseSvgRect(parent)) return false;
else if (tagName == tEllipse && !parseSvgEllipse(parent)) return false;
else if (tagName == tPolygon && !parseSvgPolygon(parent)) return false;
else if (tagName == tPolyline && !parseSvgPolyline(parent)) return false;
else if (tagName == tText && !parseSvgText(parent)) return false;
else if (tagName == tTextarea && !parseSvgTextarea(parent)) return false;
else if (tagName == tImage && !parseSvgImage(parent)) return false;
else if (tagName == tFlash && !parseSvgFlash(parent)) return false;
else if (tagName == tAudio && !parseSvgAudio(parent)) return false;
else if (tagName == tVideo && !parseSvgVideo(parent)) return false;
return true;
}
......@@ -986,7 +1043,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseDoc()
void UBCFFSubsetAdaptor::UBCFFSubsetReader::repositionSvgItem(QGraphicsItem *item, qreal width, qreal height,
qreal x, qreal y,
bool useTransform, QTransform &transform)
QTransform &transform)
{
//First using viebox coordinates, then translate them to scene coordinates
......@@ -998,29 +1055,32 @@ void UBCFFSubsetAdaptor::UBCFFSubsetReader::repositionSvgItem(QGraphicsItem *ite
qreal fullScaleX = mVBTransFactor * xScale;
qreal fullScaleY = mVBTransFactor * yScale;
if (useTransform) { //if rotation or translation specified
QPointF oldVector((x - transform.dx()), (y - transform.dy()));
QTransform rTransform(transform.m11(), transform.m12(), transform.m21(), transform.m22(), 0, 0);
QPointF newVector = rTransform.map(oldVector);
item->setTransform(rTransform.scale(fullScaleX, fullScaleY));
item->setPos((x - mViewBoxCenter.x() + (newVector - oldVector).x()) * mVBTransFactor,
(y - mViewBoxCenter.y() + (newVector - oldVector).y()) * mVBTransFactor);
} else { //item is't rotated or translated
item->setTransform(QTransform(fullScaleX, 0, 0, fullScaleY, 0, 0));
itemBounds = item->boundingRect();
item->setPos((int)((x - mViewBoxCenter.x()) * mVBTransFactor),
(int)((y - mViewBoxCenter.y()) * mVBTransFactor));
}
QPointF oldVector((x - transform.dx()), (y - transform.dy()));
QTransform rTransform;
QPointF newVector = rTransform.map(oldVector);
QRectF sr = mCurrentScene->sceneRect();
QRectF sr1 = mCurrentSceneRect;
QRectF sr2 = mCurrentScene->normalizedSceneRect();
QTransform tr = item->sceneTransform();
item->setTransform(rTransform.scale(fullScaleX, fullScaleY), true);
tr = item->sceneTransform();
QPoint pos ((int)((x + mShiftVector.x() + (newVector - oldVector).x()) * mVBTransFactor), (int)((y +mShiftVector.y() + (newVector - oldVector).y()) * mVBTransFactor));
item->setPos(pos);
}
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::createNewScene()
{
mCurrentScene = UBPersistenceManager::persistenceManager()->createDocumentSceneAt(mProxy, mProxy->pageCount());
mCurrentScene->setURStackEnable(false);
mCurrentSceneRect = mCurrentScene->normalizedSceneRect();
mVBTransFactor = qMin(mCurrentSceneRect.width() / mViewPort.width(),
mCurrentSceneRect.height() / mViewPort.height());
mCurrentScene->setSceneRect(mViewBox);
if ((mCurrentScene->sceneRect().topLeft().x() >= 0) || (mCurrentScene->sceneRect().topLeft().y() >= 0)) {
mShiftVector = -mViewBox.center();
}
mCurrentSceneRect = mViewBox;
mVBTransFactor = qMin(mCurrentScene->normalizedSceneRect().width() / mViewPort.width(),
mCurrentScene->normalizedSceneRect().height() / mViewPort.height());
return true;
}
......@@ -1048,11 +1108,12 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::persistScenes()
qDebug() << "can't allocate scene, loading failed";
return false;
}
UBSvgSubsetAdaptor::persistScene(mProxy, mCurrentScene, i);
UBGraphicsScene *tmpScene = UBSvgSubsetAdaptor::loadScene(mProxy, i);
tmpScene->setModified(true);
UBThumbnailAdaptor::persistScene(mProxy->persistencePath(), tmpScene, i);
delete tmpScene;
UBSvgSubsetAdaptor::persistScene(mProxy, mCurrentScene, i);
UBGraphicsScene *tmpScene = UBSvgSubsetAdaptor::loadScene(mProxy, i);
tmpScene->setModified(true);
UBThumbnailAdaptor::persistScene(mProxy->persistencePath(), tmpScene, i);
delete tmpScene;
mCurrentScene->setModified(false);
}
......@@ -1087,45 +1148,63 @@ QColor UBCFFSubsetAdaptor::UBCFFSubsetReader::colorFromString(const QString& clr
return QColor(clrString);
}
QTransform UBCFFSubsetAdaptor::UBCFFSubsetReader::transformFromString(const QString trString)
QTransform UBCFFSubsetAdaptor::UBCFFSubsetReader::transformFromString(const QString trString, QGraphicsItem *item)
{
qreal dxr = 0.0;
qreal dyr = 0.0;
qreal dx = 0.0;
qreal dy = 0.0;
qreal angle = 0.0;
QTransform tr;
//check pattern for strings like 'rotate(10)'
QRegExp regexp("rotate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *\\)");
if (regexp.exactMatch(trString)) {
angle = regexp.capturedTexts().at(1).toDouble();
} else {
foreach(QString trStr, trString.split(" ", QString::SkipEmptyParts))
{
//check pattern for strings like 'rotate(10)'
QRegExp regexp("rotate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *\\)");
if (regexp.exactMatch(trStr)) {
angle = regexp.capturedTexts().at(1).toDouble();
if (item)
{
item->setTransformOriginPoint(QPointF(0, 0));
item->rotate(angle);
}
continue;
};
//check pattern for strings like 'rotate(10,20,20)' or 'rotate(10.1,10.2,34.2)'
regexp.setPattern("rotate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *, *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *, *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *\\)");
if (regexp.exactMatch(trString)) {
if (regexp.exactMatch(trStr)) {
angle = regexp.capturedTexts().at(1).toDouble();
dx = regexp.capturedTexts().at(2).toDouble();
dy = regexp.capturedTexts().at(3).toDouble();
dxr = regexp.capturedTexts().at(2).toDouble();
dyr = regexp.capturedTexts().at(3).toDouble();
if (item)
{
item->setTransformOriginPoint(QPointF(dxr, dyr)-item->pos());
item->rotate(angle);
}
continue;
}
}
//check pattern for strings like 'translate(11.0, 12.34)'
regexp.setPattern("translate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *,*([-+]{0,1}[0-9]*\\.{0,1}[0-9]*)*\\)");
if (regexp.exactMatch(trString)) {
dx = regexp.capturedTexts().at(1).toDouble();
dy = regexp.capturedTexts().at(2).toDouble();
}
return QTransform().translate(dx, dy).rotate(angle);
//check pattern for strings like 'translate(11.0, 12.34)'
regexp.setPattern("translate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *,*([-+]{0,1}[0-9]*\\.{0,1}[0-9]*)*\\)");
if (regexp.exactMatch(trStr)) {
dx = regexp.capturedTexts().at(1).toDouble();
dy = regexp.capturedTexts().at(2).toDouble();
tr.translate(dx,dy);
continue;
}
}
return tr;
}
bool UBCFFSubsetAdaptor::UBCFFSubsetReader::getViewBoxDimenstions(const QString& viewBox)
{
//check pattern for strings like 'rotate(10)'
QRegExp regexp("([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)");
if (regexp.exactMatch(viewBox))
QStringList capturedTexts = viewBox.split(" ", QString::SkipEmptyParts);
if (capturedTexts.count())
{
int capturesCount = regexp.capturedTexts().count();
if (capturesCount == 5 && regexp.capturedTexts().at(0).length() == viewBox.length())
if (4 == capturedTexts.count())
{
mViewBox = QRectF(0, 0, regexp.capturedTexts().at(3).toDouble(), regexp.capturedTexts().at(4).toDouble());
mViewBox = QRectF(capturedTexts.at(0).toDouble(), capturedTexts.at(1).toDouble(), capturedTexts.at(2).toDouble(), capturedTexts.at(3).toDouble());
mViewPort = mViewBox;
mViewPort.translate(- mViewPort.center());
mViewBoxCenter.setX(mViewBox.width() / 2);
......
......@@ -65,6 +65,7 @@ private:
qreal mVBTransFactor;
QPointF mViewBoxCenter;
QSize mSize;
QPointF mShiftVector;
private:
QDomDocument mDOMdoc;
......@@ -85,6 +86,8 @@ private:
bool parseIwbMeta(const QDomElement &element);
bool parseSvg(const QDomElement &svgSection);
inline bool parseGSection(const QDomElement &element);
inline bool parseSvgSwitchSection(const QDomElement &element);
inline bool parseSvgRect(const QDomElement &element);
inline bool parseSvgEllipse(const QDomElement &element);
inline bool parseSvgPolygon(const QDomElement &element);
......@@ -123,9 +126,9 @@ private:
// helper methods
void repositionSvgItem(QGraphicsItem *item, qreal width, qreal height,
qreal x, qreal y,
bool useTransform, QTransform &transform);
QTransform &transform);
QColor colorFromString(const QString& clrString);
QTransform transformFromString(const QString trString);
QTransform transformFromString(const QString trString, QGraphicsItem *item = 0);
bool getViewBoxDimenstions(const QString& viewBox);
QSvgGenerator* createSvgGenerator(qreal width, qreal height);
bool getTempFileName();
......
......@@ -100,6 +100,7 @@ void UBExportFullPDF::saveOverlayPdf(UBDocumentProxy* pDocumentProxy, const QStr
if (pageIndex != 0) pdfPrinter.newPage();
//render to PDF
scene->setDrawingMode(true);
scene->render(pdfPainter, QRectF(), scene->normalizedSceneRect());
//restore screen rendering quality
......@@ -107,6 +108,7 @@ void UBExportFullPDF::saveOverlayPdf(UBDocumentProxy* pDocumentProxy, const QStr
scene->setRenderingQuality(UBItem::RenderingQualityNormal);
//restore background state
scene->setDrawingMode(false);
scene->setBackground(isDark, isCrossed);
}
......
......@@ -389,7 +389,8 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene()
// introduced in UB 4.0
QStringRef svgViewBox = mXmlReader.attributes().value(nsSvg, "viewBox");
QStringRef svgViewBox = mXmlReader.attributes().value("viewBox");
if (!svgViewBox.isNull())
{
......
......@@ -534,7 +534,7 @@ void UBWidgetUniboardAPI::ProcessDropEvent(QDropEvent *event)
}
}
}
qDebug() << destFileName;
QString mimeText = createMimeText(downloaded, contentType, destFileName);
dropMimeData.setData(tMimeText, mimeText.toAscii());
......@@ -623,7 +623,7 @@ QString UBWidgetUniboardAPI::createMimeText(bool downloaded, const QString &mime
}
QString relatedFileName = fileName;
relatedFileName = relatedFileName.remove(mGraphicsWidget->getOwnFolder().toLocalFile());
relatedFileName = relatedFileName.remove(mGraphicsWidget->getOwnFolder().toLocalFile() + "/");
writer.writeTextElement(tPath, relatedFileName); //writing path to created object
}
......
......@@ -733,11 +733,11 @@ void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool is
if(mKeyboardPalette->m_isVisible)
{
mKeyboardPalette->hide();
mKeyboardPalette->setParent(brWnd);
mKeyboardPalette->setParent(UBApplication::mainWindow);
mKeyboardPalette->show();
}
else
mKeyboardPalette->setParent(brWnd);
mKeyboardPalette->setParent(UBApplication::mainWindow);
}
}
......
/*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UBBOARDPALETTEMANAGER_H_
#define UBBOARDPALETTEMANAGER_H_
#include <QtGui>
#include <QtWebKit>
#include "web/UBRoutedMouseEventWebView.h"
#include "gui/UBLeftPalette.h"
#include "gui/UBRightPalette.h"
#include "gui/UBPageNavigationWidget.h"
#include "gui/UBLibWidget.h"
#include "gui/UBCachePropertiesWidget.h"
#include "gui/UBDockDownloadWidget.h"
#include "core/UBApplicationController.h"
#include "gui/UBFeaturesWidget.h"
class UBStylusPalette;
class UBClockPalette;
class UBPageNumberPalette;
class UBZoomPalette;
class UBActionPalette;
class UBBoardController;
class UBFloatingPalette;
class UBServerXMLHttpRequest;
class UBKeyboardPalette;
class UBMainWindow;
class UBApplicationController;
class UBDockTeacherGuideWidget;
/*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UBBOARDPALETTEMANAGER_H_
#define UBBOARDPALETTEMANAGER_H_
#include <QtGui>
#include <QtWebKit>
#include "web/UBRoutedMouseEventWebView.h"
#include "gui/UBLeftPalette.h"
#include "gui/UBRightPalette.h"
#include "gui/UBPageNavigationWidget.h"
#include "gui/UBLibWidget.h"
#include "gui/UBCachePropertiesWidget.h"
#include "gui/UBDockDownloadWidget.h"
#include "core/UBApplicationController.h"
#include "gui/UBFeaturesWidget.h"
class UBStylusPalette;
class UBClockPalette;
class UBPageNumberPalette;
class UBZoomPalette;
class UBActionPalette;
class UBBoardController;
class UBFloatingPalette;
class UBServerXMLHttpRequest;
class UBKeyboardPalette;
class UBMainWindow;
class UBApplicationController;
class UBDockTeacherGuideWidget;
// Uncomment this to use old-styles lib paletter
// #define USE_WEB_WIDGET
class UBBoardPaletteManager : public QObject
{
Q_OBJECT
public:
UBBoardPaletteManager(QWidget* container, UBBoardController* controller);
virtual ~UBBoardPaletteManager();
void setupLayout();
UBLeftPalette* leftPalette(){return mLeftPalette;}
UBRightPalette* rightPalette(){return mRightPalette;}
UBStylusPalette* stylusPalette(){return mStylusPalette;}
void showVirtualKeyboard(bool show = true);
void initPalettesPosAtStartup();
void connectToDocumentController();
void refreshPalettes();
UBKeyboardPalette *mKeyboardPalette;
void processPalettersWidget(UBDockPalette *paletter, eUBDockPaletteWidgetMode mode);
void changeMode(eUBDockPaletteWidgetMode newMode, bool isInit = false);
void startDownloads();
void stopDownloads();
signals:
void connectToDocController();
void signal_changeMode(eUBDockPaletteWidgetMode newMode);
public slots:
void activeSceneChanged();
void containerResized();
void addItem(const QUrl& pUrl);
void addItem(const QPixmap& pPixmap, const QPointF& p = QPointF(0.0, 0.0), qreal scale = 1.0, const QUrl& sourceUrl = QUrl());
void slot_changeMainMode(UBApplicationController::MainMode);
void slot_changeDesktopMode(bool);
private:
void setupPalettes();
void connectPalettes();
void positionFreeDisplayPalette();
void setupDockPaletteWidgets();
QWidget* mContainer;
UBBoardController *mBoardControler;
UBStylusPalette *mStylusPalette;
UBZoomPalette *mZoomPalette;
/** The left dock palette */
UBLeftPalette* mLeftPalette;
/** The right dock palette */
UBRightPalette* mRightPalette;
UBActionPalette *mBackgroundsPalette;
UBActionPalette *mToolsPalette;
UBActionPalette* mAddItemPalette;
UBActionPalette* mErasePalette;
UBActionPalette* mPagePalette;
QUrl mItemUrl;
QPixmap mPixmap;
QPointF mPos;
qreal mScaleFactor;
QTime mPageButtonPressedTime;
bool mPendingPageButtonPressed;
QTime mZoomButtonPressedTime;
bool mPendingZoomButtonPressed;
QTime mPanButtonPressedTime;
bool mPendingPanButtonPressed;
QTime mEraseButtonPressedTime;
bool mPendingEraseButtonPressed;
/** The page navigator widget */
UBPageNavigationWidget* mpPageNavigWidget;
#ifdef USE_WEB_WIDGET
/** The library widget */
UBLibWidget* mpLibWidget;
#endif
/** The cache properties widget */
UBCachePropertiesWidget* mpCachePropWidget;
UBFeaturesWidget *mpFeaturesWidget;
/** The download widget */
UBDockDownloadWidget* mpDownloadWidget;
// HACK: here we duplicate the lib widget for the desktop mode
// we MUST refactor the architecture in order to use only one
// lib widget!
UBLibWidget* mpDesktopLibWidget;
UBDockTeacherGuideWidget* mpTeacherGuideWidget;
bool mDownloadInProgress;
private slots:
void changeBackground();
void toggleBackgroundPalette(bool checked);
void backgroundPaletteClosed();
void toggleStylusPalette(bool checked);
void tooglePodcastPalette(bool checked);
void erasePaletteButtonPressed();
void erasePaletteButtonReleased();
void toggleErasePalette(bool ckecked);
void erasePaletteClosed();
void togglePagePalette(bool ckecked);
void pagePaletteClosed();
void pagePaletteButtonPressed();
void pagePaletteButtonReleased();
void addItemToCurrentPage();
void addItemToNewPage();
void addItemToLibrary();
void purchaseLinkActivated(const QString&);
void linkClicked(const QUrl& url);
void zoomButtonPressed();
void zoomButtonReleased();
void panButtonPressed();
void panButtonReleased();
void changeStylusPaletteOrientation(QVariant var);
};
#endif /* UBBOARDPALETTEMANAGER_H_ */
class UBBoardPaletteManager : public QObject
{
Q_OBJECT
public:
UBBoardPaletteManager(QWidget* container, UBBoardController* controller);
virtual ~UBBoardPaletteManager();
void setupLayout();
UBLeftPalette* leftPalette(){return mLeftPalette;}
UBRightPalette* rightPalette(){return mRightPalette;}
UBStylusPalette* stylusPalette(){return mStylusPalette;}
void showVirtualKeyboard(bool show = true);
void initPalettesPosAtStartup();
void connectToDocumentController();
void refreshPalettes();
UBKeyboardPalette *mKeyboardPalette;
void processPalettersWidget(UBDockPalette *paletter, eUBDockPaletteWidgetMode mode);
void changeMode(eUBDockPaletteWidgetMode newMode, bool isInit = false);
void startDownloads();
void stopDownloads();
signals:
void connectToDocController();
void signal_changeMode(eUBDockPaletteWidgetMode newMode);
public slots:
void activeSceneChanged();
void containerResized();
void addItem(const QUrl& pUrl);
void addItem(const QPixmap& pPixmap, const QPointF& p = QPointF(0.0, 0.0), qreal scale = 1.0, const QUrl& sourceUrl = QUrl());
void slot_changeMainMode(UBApplicationController::MainMode);
void slot_changeDesktopMode(bool);
private:
void setupPalettes();
void connectPalettes();
void positionFreeDisplayPalette();
void setupDockPaletteWidgets();
QWidget* mContainer;
UBBoardController *mBoardControler;
UBStylusPalette *mStylusPalette;
UBZoomPalette *mZoomPalette;
/** The left dock palette */
UBLeftPalette* mLeftPalette;
/** The right dock palette */
UBRightPalette* mRightPalette;
UBActionPalette *mBackgroundsPalette;
UBActionPalette *mToolsPalette;
UBActionPalette* mAddItemPalette;
UBActionPalette* mErasePalette;
UBActionPalette* mPagePalette;
QUrl mItemUrl;
QPixmap mPixmap;
QPointF mPos;
qreal mScaleFactor;
QTime mPageButtonPressedTime;
bool mPendingPageButtonPressed;
QTime mZoomButtonPressedTime;
bool mPendingZoomButtonPressed;
QTime mPanButtonPressedTime;
bool mPendingPanButtonPressed;
QTime mEraseButtonPressedTime;
bool mPendingEraseButtonPressed;
/** The page navigator widget */
UBPageNavigationWidget* mpPageNavigWidget;
#ifdef USE_WEB_WIDGET
/** The library widget */
UBLibWidget* mpLibWidget;
#endif
/** The cache properties widget */
UBCachePropertiesWidget* mpCachePropWidget;
UBFeaturesWidget *mpFeaturesWidget;
/** The download widget */
UBDockDownloadWidget* mpDownloadWidget;
// HACK: here we duplicate the lib widget for the desktop mode
// we MUST refactor the architecture in order to use only one
// lib widget!
UBLibWidget* mpDesktopLibWidget;
UBDockTeacherGuideWidget* mpTeacherGuideWidget;
bool mDownloadInProgress;
private slots:
void changeBackground();
void toggleBackgroundPalette(bool checked);
void backgroundPaletteClosed();
void toggleStylusPalette(bool checked);
void tooglePodcastPalette(bool checked);
void erasePaletteButtonPressed();
void erasePaletteButtonReleased();
void toggleErasePalette(bool ckecked);
void erasePaletteClosed();
void togglePagePalette(bool ckecked);
void pagePaletteClosed();
void pagePaletteButtonPressed();
void pagePaletteButtonReleased();
void addItemToCurrentPage();
void addItemToNewPage();
void addItemToLibrary();
void purchaseLinkActivated(const QString&);
void linkClicked(const QUrl& url);
void zoomButtonPressed();
void zoomButtonReleased();
void panButtonPressed();
void panButtonReleased();
void changeStylusPaletteOrientation(QVariant var);
};
#endif /* UBBOARDPALETTEMANAGER_H_ */
......@@ -436,7 +436,6 @@ void UBBoardView::mousePressEvent (QMouseEvent *event)
|| movingItem->type() == UBGraphicsTriangle::Type
|| movingItem == this->scene()->backgroundObject()
|| movingItem->group())
{
movingItem = NULL;
QGraphicsView::mousePressEvent (event);
......
......@@ -18,15 +18,24 @@
#include "domain/UBGraphicsVideoItem.h"
#include "domain/UBGraphicsWidgetItem.h"
UBFeature::UBFeature(const QString &url, const QPixmap &icon, const QString &name, const QString &realPath, UBFeatureElementType type)
UBFeature::UBFeature(const QString &url, const QPixmap &icon, const QString &name, const QUrl &realPath, UBFeatureElementType type)
: virtualPath(url), mThumbnail(icon), mName(name), mPath(realPath), elementType(type)
{
}
QString UBFeature::getUrl() const
{
if ( elementType == FEATURE_INTERNAL )
return getFullPath().toString();
/*if ( UBApplication::isFromWeb( getFullPath() ) )
return QUrl( getFullPath() );*/
return getFullPath().toLocalFile();
}
bool UBFeature::operator ==( const UBFeature &f )const
{
return virtualPath == f.getUrl() && mName == f.getName() && mPath == f.getFullPath() && elementType == f.getType();
return virtualPath == f.getVirtualPath() && mName == f.getName() && mPath == f.getFullPath() && elementType == f.getType();
}
bool UBFeature::operator !=( const UBFeature &f )const
......@@ -55,24 +64,24 @@ UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) :
void UBFeaturesController::initDirectoryTree()
{
mUserAudioDirectoryPath = UBSettings::settings()->userAudioDirectory();
mUserVideoDirectoryPath = UBSettings::settings()->userVideoDirectory();
mUserPicturesDirectoryPath = UBSettings::settings()->userImageDirectory();
mUserInteractiveDirectoryPath = UBSettings::settings()->userInteractiveDirectory();
mUserAnimationDirectoryPath = UBSettings::settings()->userAnimationDirectory();
mLibPicturesDirectoryPath = UBSettings::settings()->applicationImageLibraryDirectory();
mLibInteractiveDirectoryPath = UBSettings::settings()->applicationInteractivesDirectory();
mLibApplicationsDirectoryPath = UBSettings::settings()->applicationApplicationsLibraryDirectory();
mLibShapesDirectoryPath = UBSettings::settings()->applicationShapeLibraryDirectory() ;
mLibSearchDirectoryPath = UBSettings::settings()->userSearchDirectory();
trashDirectoryPath = UBSettings::userTrashDirPath();
mUserAudioDirectoryPath = QUrl::fromLocalFile( UBSettings::settings()->userAudioDirectory() );
mUserVideoDirectoryPath = QUrl::fromLocalFile( UBSettings::settings()->userVideoDirectory() );
mUserPicturesDirectoryPath = QUrl::fromLocalFile( UBSettings::settings()->userImageDirectory() );
mUserInteractiveDirectoryPath = QUrl::fromLocalFile( UBSettings::settings()->userInteractiveDirectory() );
mUserAnimationDirectoryPath = QUrl::fromLocalFile( UBSettings::settings()->userAnimationDirectory() );
mLibPicturesDirectoryPath = QUrl::fromLocalFile( UBSettings::settings()->applicationImageLibraryDirectory() );
mLibInteractiveDirectoryPath = QUrl::fromLocalFile( UBSettings::settings()->applicationInteractivesDirectory() );
mLibApplicationsDirectoryPath = QUrl::fromLocalFile( UBSettings::settings()->applicationApplicationsLibraryDirectory() );
mLibShapesDirectoryPath = QUrl::fromLocalFile( UBSettings::settings()->applicationShapeLibraryDirectory() );
mLibSearchDirectoryPath =QUrl::fromLocalFile( UBSettings::settings()->userSearchDirectory() );
trashDirectoryPath = QUrl::fromLocalFile( UBSettings::userTrashDirPath() );
featuresList = new QList <UBFeature>();
QList <UBToolsManager::UBToolDescriptor> tools = UBToolsManager::manager()->allTools();
featuresList->append( UBFeature( QString(), QPixmap( ":images/libpalette/home.png" ), "root", QString() ) );
featuresList->append( UBFeature( QString(), QPixmap( ":images/libpalette/home.png" ), "root", QUrl() ) );
currentElement = featuresList->at(0);
appPath = rootPath + "/Applications";
......@@ -99,18 +108,18 @@ void UBFeaturesController::initDirectoryTree()
featuresList->append( UBFeature( rootPath, QPixmap(":images/libpalette/ShapesCategory.svg"), "Shapes" , mLibShapesDirectoryPath ) );
trashElement = UBFeature( rootPath, QPixmap(":images/libpalette/TrashCategory.svg"), "Trash", trashDirectoryPath, FEATURE_TRASH );
featuresList->append( trashElement );
favoriteElement = UBFeature( rootPath, QPixmap(":images/libpalette/FavoritesCategory.svg"), "Favorites", "favorites", FEATURE_FAVORITE );
favoriteElement = UBFeature( rootPath, QPixmap(":images/libpalette/FavoritesCategory.svg"), "Favorites", QUrl("favorites"), FEATURE_FAVORITE );
featuresList->append( favoriteElement );
searchElement = UBFeature( rootPath, QPixmap(":images/libpalette/WebSearchCategory.svg"), "Web search", mLibSearchDirectoryPath );
featuresList->append( searchElement );
webSearchElement = UBFeature( rootPath, QPixmap(":images/libpalette/WebSearchCategory.svg"), "Web search", mLibSearchDirectoryPath );
featuresList->append( webSearchElement );
loadFavoriteList();
foreach (UBToolsManager::UBToolDescriptor tool, tools)
{
featuresList->append( UBFeature( appPath, tool.icon, tool.label, tool.id, FEATURE_INTERNAL ) );
if ( favoriteSet->find( tool.id ) != favoriteSet->end() )
featuresList->append( UBFeature( appPath, tool.icon, tool.label, QUrl( tool.id ), FEATURE_INTERNAL ) );
if ( favoriteSet->find( QUrl( tool.id ) ) != favoriteSet->end() )
{
featuresList->append( UBFeature( favoritePath, tool.icon, tool.label, tool.id, FEATURE_INTERNAL ) );
featuresList->append( UBFeature( favoritePath, tool.icon, tool.label, QUrl( tool.id ), FEATURE_INTERNAL ) );
}
}
fileSystemScan( mUserInteractiveDirectoryPath, appPath );
......@@ -129,9 +138,9 @@ void UBFeaturesController::initDirectoryTree()
}
void UBFeaturesController::fileSystemScan(const QString & currentPath, const QString & currVirtualPath)
void UBFeaturesController::fileSystemScan(const QUrl & currentPath, const QString & currVirtualPath)
{
QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(currentPath);
QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(currentPath.toLocalFile());
QFileInfoList::iterator fileInfo;
for ( fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end(); fileInfo += 1)
......@@ -151,6 +160,7 @@ void UBFeaturesController::fileSystemScan(const QString & currentPath, const QSt
QString itemName = (fileType != FEATURE_ITEM) ? fileName : fileInfo->completeBaseName();
QPixmap icon = QPixmap(":images/libpalette/soundIcon.svg");
QString fullFileName = fileInfo->filePath();
if ( fileType == FEATURE_FOLDER )
{
......@@ -171,15 +181,15 @@ void UBFeaturesController::fileSystemScan(const QString & currentPath, const QSt
icon = QPixmap( thumbnailPath );
else icon = createThumbnail( fullFileName );*/
}
featuresList->append( UBFeature( currVirtualPath, icon, fileName, fullFileName, fileType ) );
if ( favoriteSet->find( fullFileName ) != favoriteSet->end() )
featuresList->append( UBFeature( currVirtualPath, icon, fileName, QUrl::fromLocalFile( fullFileName ), fileType ) );
if ( favoriteSet->find( QUrl::fromLocalFile( fullFileName ) ) != favoriteSet->end() )
{
featuresList->append( UBFeature( favoritePath, icon, fileName, fullFileName, fileType ) );
featuresList->append( UBFeature( favoritePath, icon, fileName, QUrl::fromLocalFile( fullFileName ), fileType ) );
}
if ( fileType == FEATURE_FOLDER )
{
fileSystemScan( fullFileName, currVirtualPath + "/" + fileName );
fileSystemScan( QUrl::fromLocalFile( fullFileName ), currVirtualPath + "/" + fileName );
}
}
......@@ -187,7 +197,7 @@ void UBFeaturesController::fileSystemScan(const QString & currentPath, const QSt
void UBFeaturesController::loadFavoriteList()
{
favoriteSet = new QSet<QString>();
favoriteSet = new QSet<QUrl>();
QFile file( UBSettings::userDataDirectory() + "/favorites.dat" );
if ( file.exists() )
{
......@@ -197,7 +207,7 @@ void UBFeaturesController::loadFavoriteList()
in >> elementsNumber;
for ( int i = 0; i < elementsNumber; ++i)
{
QString path;
QUrl path;
in >> path;
/*QFileInfo fileInfo( path );
QString fileName = fileInfo.fileName();
......@@ -216,7 +226,7 @@ void UBFeaturesController::saveFavoriteList()
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << favoriteSet->size();
for ( QSet<QString>::iterator it = favoriteSet->begin(); it != favoriteSet->end(); ++it )
for ( QSet<QUrl>::iterator it = favoriteSet->begin(); it != favoriteSet->end(); ++it )
{
out << (*it);
}
......@@ -226,12 +236,12 @@ void UBFeaturesController::saveFavoriteList()
UBFeature UBFeaturesController::addToFavorite( const QUrl &path )
{
QString filePath = fileNameFromUrl( path );
if ( favoriteSet->find( filePath ) == favoriteSet->end() )
if ( favoriteSet->find( path ) == favoriteSet->end() )
{
QFileInfo fileInfo( filePath );
QString fileName = fileInfo.fileName();
UBFeature elem( favoritePath, thumbnailForFile( filePath ), fileName, filePath, fileTypeFromUrl(filePath) );
favoriteSet->insert( filePath );
UBFeature elem( favoritePath, thumbnailForFile( filePath ), fileName, path, fileTypeFromUrl(filePath) );
favoriteSet->insert( path );
saveFavoriteList();
return elem;
}
......@@ -241,9 +251,9 @@ UBFeature UBFeaturesController::addToFavorite( const QUrl &path )
void UBFeaturesController::removeFromFavorite( const QUrl &path )
{
QString filePath = fileNameFromUrl( path );
if ( favoriteSet->find( filePath ) != favoriteSet->end() )
if ( favoriteSet->find( path ) != favoriteSet->end() )
{
favoriteSet->erase( favoriteSet->find( filePath ) );
favoriteSet->erase( favoriteSet->find( path ) );
saveFavoriteList();
}
}
......@@ -256,6 +266,7 @@ QString UBFeaturesController::fileNameFromUrl( const QUrl &url )
return url.toLocalFile();
}
UBFeatureElementType UBFeaturesController::fileTypeFromUrl( const QString &path )
{
QFileInfo fileInfo( path );
......@@ -334,31 +345,52 @@ QPixmap UBFeaturesController::createThumbnail(const QString &path)
return QPixmap(thumbnailPath);
}
UBFeature UBFeaturesController::importImage( const QImage &image, const UBFeature &destination )
{
QDateTime now = QDateTime::currentDateTime();
QString fileName = tr("ImportedImage") + "-" + now.toString("dd-MM-yyyy hh-mm-ss") + ".png";
UBFeature dest = destination;
if ( !destination.getFullVirtualPath().startsWith( picturesElement.getFullVirtualPath(), Qt::CaseInsensitive ) )
{
dest = picturesElement;
}
QString filePath = dest.getFullPath().toLocalFile() + "/" + fileName;
image.save(filePath);
QPixmap thumb = createThumbnail( filePath );
return UBFeature( dest.getFullVirtualPath(), thumb, fileName,
QUrl::fromLocalFile( filePath ), FEATURE_ITEM );
}
UBFeature UBFeaturesController::newFolder( const QString &name )
{
QString path = currentElement.getFullPath() + "/" + name;
QString path = currentElement.getFullPath().toLocalFile() + "/" + name;
if(!QFileInfo(path).exists())
{
QDir().mkpath(path);
}
return UBFeature( currentElement.getUrl() + "/" + currentElement.getName(), QPixmap(":images/libpalette/folder.svg"), name, path, FEATURE_FOLDER );
return UBFeature( currentElement.getFullVirtualPath(), QPixmap(":images/libpalette/folder.svg"),
name, QUrl::fromLocalFile( path ), FEATURE_FOLDER );
}
void UBFeaturesController::addItemToPage(const UBFeature &item)
{
if ( item.getType() == FEATURE_INTERNAL )
{
UBApplication::boardController->downloadURL( QUrl( item.getFullPath() ) );
}
else
{
UBApplication::boardController->downloadURL( QUrl::fromLocalFile( item.getFullPath() ) );
}
UBApplication::boardController->downloadURL( item.getFullPath() );
}
void UBFeaturesController::addItemAsBackground(const UBFeature &item)
{
UBApplication::boardController->downloadURL( item.getFullPath(), QPointF(), QSize(), true );
}
UBFeature UBFeaturesController::getDestinationForItem( const QUrl &url )
{
QString mimetype = UBFileSystemUtils::mimeTypeFromFileName( fileNameFromUrl(url) );
QString mimetype = UBFileSystemUtils::mimeTypeFromFileName( url.toString() );
if ( mimetype.contains("audio") )
return audiosElement;
......@@ -376,10 +408,60 @@ UBFeature UBFeaturesController::getDestinationForItem( const QUrl &url )
return UBFeature();
}
UBFeature UBFeaturesController::addDownloadedFile( const QUrl &sourceUrl, const QByteArray &pData )
{
UBFeature dest = getDestinationForItem( sourceUrl );
if ( dest == UBFeature() )
return UBFeature();
QString fileName = QFileInfo( sourceUrl.toString() ).fileName();
QString filePath = dest.getFullPath().toLocalFile() + "/" + fileName;
QFile file( filePath );
if( file.open(QIODevice::WriteOnly ))
{
file.write(pData);
file.close();
return UBFeature( dest.getFullVirtualPath(), thumbnailForFile( filePath ),
fileName, QUrl::fromLocalFile(filePath), FEATURE_ITEM );
}
return UBFeature();
}
UBFeature UBFeaturesController::moveItemToFolder( const QUrl &url, const UBFeature &destination )
{
UBFeature newElement = copyItemToFolder( url, destination );
/*UBFeature newElement = copyItemToFolder( url, destination );
deleteItem( url );
return newElement;*/
QString sourcePath = url.toLocalFile();
Q_ASSERT( QFileInfo( sourcePath ).exists() );
UBFeature possibleDest = getDestinationForItem( url );
UBFeature dest = destination;
if ( destination != trashElement &&
!destination.getFullVirtualPath().startsWith( possibleDest.getFullVirtualPath(), Qt::CaseInsensitive ) )
{
dest = possibleDest;
}
QString name = QFileInfo( sourcePath ).fileName();
QString destPath = dest.getFullPath().toLocalFile();
QString destVirtualPath = dest.getFullVirtualPath();
QString newFullPath = destPath + "/" + name;
if ( sourcePath.compare( newFullPath, Qt::CaseInsensitive ) )
{
QFile( sourcePath ).copy( newFullPath );
deleteItem( url );
}
QPixmap thumb = thumbnailForFile( newFullPath );
UBFeatureElementType type = FEATURE_ITEM;
if ( UBFileSystemUtils::mimeTypeFromFileName( newFullPath ).contains("application") )
type = FEATURE_INTERACTIVE;
UBFeature newElement( destVirtualPath, thumb, name, QUrl::fromLocalFile( newFullPath ), type );
return newElement;
}
......@@ -394,23 +476,24 @@ UBFeature UBFeaturesController::copyItemToFolder( const QUrl &url, const UBFeatu
UBFeature dest = destination;
if ( destination != trashElement &&
!destination.getVirtualPath().startsWith( possibleDest.getVirtualPath(), Qt::CaseInsensitive ) )
!destination.getFullVirtualPath().startsWith( possibleDest.getFullVirtualPath(), Qt::CaseInsensitive ) )
{
dest = possibleDest;
}
QString name = QFileInfo( sourcePath ).fileName();
QString destPath = dest.getFullPath();
QString destVirtualPath = dest.getVirtualPath();
QString destPath = dest.getFullPath().toLocalFile();
QString destVirtualPath = dest.getFullVirtualPath();
QString newFullPath = destPath + "/" + name;
QFile( sourcePath ).copy( newFullPath );
if ( !sourcePath.compare( newFullPath, Qt::CaseInsensitive ) )
QFile( sourcePath ).copy( newFullPath );
QPixmap thumb = thumbnailForFile( newFullPath );
UBFeatureElementType type = FEATURE_ITEM;
if ( UBFileSystemUtils::mimeTypeFromFileName( newFullPath ).contains("application") )
type = FEATURE_INTERACTIVE;
UBFeature newElement( destVirtualPath, thumb, name, newFullPath, type );
UBFeature newElement( destVirtualPath, thumb, name, QUrl::fromLocalFile( newFullPath ), type );
return newElement;
}
......@@ -420,7 +503,7 @@ void UBFeaturesController::deleteItem( const QUrl &url )
Q_ASSERT( QFileInfo( path ).exists() );
QString thumbnailPath = UBFileSystemUtils::thumbnailPath( path );
if (thumbnailPath.length() && QFileInfo( thumbnailPath ).exists())
if ( thumbnailPath.length() && QFileInfo( thumbnailPath ).exists() )
{
QFile::remove(thumbnailPath);
}
......@@ -429,7 +512,7 @@ void UBFeaturesController::deleteItem( const QUrl &url )
bool UBFeaturesController::isTrash( const QUrl &url )
{
return url.toLocalFile().startsWith( trashDirectoryPath );
return url.toLocalFile().startsWith( trashDirectoryPath.toLocalFile() );
}
UBFeaturesController::~UBFeaturesController()
......
......@@ -8,129 +8,132 @@
#include <QVector>
#include <QString>
#include <QPixmap>
#include <QMap>
#include <QUrl>
#include <QByteArray>
enum UBFeatureElementType
{
FEATURE_CATEGORY,
FEATURE_VIRTUALFOLDER,
FEATURE_FOLDER,
FEATURE_INTERACTIVE,
FEATURE_INTERNAL,
FEATURE_ITEM,
FEATURE_TRASH,
FEATURE_FAVORITE,
FEATURE_SEARCH
FEATURE_CATEGORY,
FEATURE_VIRTUALFOLDER,
FEATURE_FOLDER,
FEATURE_INTERACTIVE,
FEATURE_INTERNAL,
FEATURE_ITEM,
FEATURE_TRASH,
FEATURE_FAVORITE,
FEATURE_SEARCH
};
class UBFeature
{
public:
UBFeature() {;}
//UBFeature(const UBFeature &f);
UBFeature(const QString &url, const QPixmap &icon, const QString &name, const QString &realPath, UBFeatureElementType type = FEATURE_CATEGORY);
virtual ~UBFeature() {;}
QString getName() const { return mName; }
QPixmap getThumbnail() const {return mThumbnail;}
QString getUrl() const { return virtualPath; }
//QString getPath() const { return mPath; };
QString getFullPath() const { return mPath; }
QString getVirtualPath() const { return virtualPath + "/" + mName; }
UBFeatureElementType getType() const { return elementType; }
bool isFolder() const;
bool isDeletable() const;
bool operator ==( const UBFeature &f )const;
bool operator !=( const UBFeature &f )const;
private:
QString virtualPath;
QPixmap mThumbnail;
QString mName;
QString mPath;
UBFeatureElementType elementType;
public:
UBFeature() {;}
//UBFeature(const UBFeature &f);
UBFeature(const QString &url, const QPixmap &icon, const QString &name, const QString &realPath, UBFeatureElementType type = FEATURE_CATEGORY);
virtual ~UBFeature() {;}
QString getName() const { return mName; }
QPixmap getThumbnail() const {return mThumbnail;}
QString getUrl() const { return virtualPath; }
//QString getPath() const { return mPath; };
QString getFullPath() const { return mPath; }
QString getVirtualPath() const { return virtualPath + "/" + mName; }
UBFeatureElementType getType() const { return elementType; }
bool isFolder() const;
bool isDeletable() const;
bool operator ==( const UBFeature &f )const;
bool operator !=( const UBFeature &f )const;
private:
QString virtualPath;
QPixmap mThumbnail;
QString mName;
QString mPath;
UBFeatureElementType elementType;
};
Q_DECLARE_METATYPE( UBFeature )
class UBFeaturesController : public QObject
class UBFeaturesController : public QObject
{
Q_OBJECT
public:
UBFeaturesController(QWidget *parentWidget);
virtual ~UBFeaturesController();
QList <UBFeature>* getFeatures()const { return featuresList; }
const QString& getRootPath()const { return rootPath; }
void addItemToPage(const UBFeature &item);
const UBFeature& getCurrentElement()const { return currentElement; }
void setCurrentElement( const UBFeature &elem ) { currentElement = elem; }
const UBFeature & getTrashElement () const { return trashElement; }
UBFeature moveItemToFolder( const QUrl &url, const UBFeature &destination );
UBFeature copyItemToFolder( const QUrl &url, const UBFeature &destination );
void deleteItem( const QUrl &url );
bool isTrash( const QUrl &url );
UBFeature newFolder( const QString &name );
UBFeature addToFavorite( const QUrl &path );
void removeFromFavorite( const QUrl &path );
static QString fileNameFromUrl( const QUrl &url );
static QPixmap thumbnailForFile( const QString &path );
static bool isDeletable( const QUrl &url );
private:
void initDirectoryTree();
void fileSystemScan(const QString &currPath, const QString & currVirtualPath);
static QPixmap createThumbnail(const QString &path);
//void addImageToCurrentPage( const QString &path );
void loadFavoriteList();
void saveFavoriteList();
UBFeature getDestinationForItem( const QUrl &url );
static UBFeatureElementType fileTypeFromUrl( const QString &path );
QList <UBFeature> *featuresList;
UBFeature *rootElement;
QString mUserAudioDirectoryPath;
QString mUserVideoDirectoryPath;
QString mUserPicturesDirectoryPath;
QString mUserInteractiveDirectoryPath;
QString mUserAnimationDirectoryPath;
QString libraryPath;
QString mLibAudioDirectoryPath;
QString mLibVideoDirectoryPath;
QString mLibPicturesDirectoryPath;
QString mLibInteractiveDirectoryPath;
QString mLibAnimationDirectoryPath;
QString mLibApplicationsDirectoryPath;
QString mLibShapesDirectoryPath;
QString trashDirectoryPath;
QString mLibSearchDirectoryPath;
QString rootPath;
QString audiosPath;
QString moviesPath;
QString picturesPath;
QString appPath;
QString flashPath;
QString shapesPath;
QString interactPath;
QString trashPath;
QString favoritePath;
int mLastItemOffsetIndex;
UBFeature currentElement;
UBFeature trashElement;
UBFeature favoriteElement;
UBFeature audiosElement;
UBFeature moviesElement;
UBFeature picturesElement;
UBFeature interactElement;
UBFeature flashElement;
UBFeature shapesElement;
UBFeature searchElement;
QSet <QString> *favoriteSet;
Q_OBJECT
public:
UBFeaturesController(QWidget *parentWidget);
virtual ~UBFeaturesController();
QList <UBFeature>* getFeatures()const { return featuresList; }
const QString& getRootPath()const { return rootPath; }
void addItemToPage(const UBFeature &item);
const UBFeature& getCurrentElement()const { return currentElement; }
void setCurrentElement( const UBFeature &elem ) { currentElement = elem; }
const UBFeature & getTrashElement () const { return trashElement; }
UBFeature moveItemToFolder( const QUrl &url, const UBFeature &destination );
UBFeature copyItemToFolder( const QUrl &url, const UBFeature &destination );
void deleteItem( const QUrl &url );
bool isTrash( const QUrl &url );
UBFeature newFolder( const QString &name );
UBFeature addToFavorite( const QUrl &path );
void removeFromFavorite( const QUrl &path );
static QString fileNameFromUrl( const QUrl &url );
static QPixmap thumbnailForFile( const QString &path );
static bool isDeletable( const QUrl &url );
private:
void initDirectoryTree();
void fileSystemScan(const QString &currPath, const QString & currVirtualPath);
static QPixmap createThumbnail(const QString &path);
//void addImageToCurrentPage( const QString &path );
void loadFavoriteList();
void saveFavoriteList();
UBFeature getDestinationForItem( const QUrl &url );
static UBFeatureElementType fileTypeFromUrl( const QString &path );
QList <UBFeature> *featuresList;
UBFeature *rootElement;
QString mUserAudioDirectoryPath;
QString mUserVideoDirectoryPath;
QString mUserPicturesDirectoryPath;
QString mUserInteractiveDirectoryPath;
QString mUserAnimationDirectoryPath;
QString libraryPath;
QString mLibAudioDirectoryPath;
QString mLibVideoDirectoryPath;
QString mLibPicturesDirectoryPath;
QString mLibInteractiveDirectoryPath;
QString mLibAnimationDirectoryPath;
QString mLibApplicationsDirectoryPath;
QString mLibShapesDirectoryPath;
QString trashDirectoryPath;
QString mLibSearchDirectoryPath;
QString rootPath;
QString audiosPath;
QString moviesPath;
QString picturesPath;
QString appPath;
QString flashPath;
QString shapesPath;
QString interactPath;
QString trashPath;
QString favoritePath;
int mLastItemOffsetIndex;
UBFeature currentElement;
UBFeature trashElement;
UBFeature favoriteElement;
UBFeature audiosElement;
UBFeature moviesElement;
UBFeature picturesElement;
UBFeature interactElement;
UBFeature flashElement;
UBFeature shapesElement;
UBFeature searchElement;
QSet <QString> *favoriteSet;
};
......
......@@ -72,9 +72,15 @@ UBDocumentController::UBDocumentController(UBMainWindow* mainWindow)
{
setupViews();
setupToolbar();
this->selectDocument(UBApplication::boardController->activeDocument());
connect(this, SIGNAL(exportDone()), mMainWindow, SLOT(onExportDone()));
connect(mMainWindow->actionNewPage, SIGNAL(triggered()), this, SLOT(reloadThumbs()));
}
void UBDocumentController::reloadThumbs()
{
mDocumentThumbs = UBThumbnailAdaptor::load(selectedDocumentProxy());
}
UBDocumentController::~UBDocumentController()
{
......
......@@ -75,6 +75,7 @@ class UBDocumentController : public QObject
void copy();
void paste();
void focusChanged(QWidget *old, QWidget *current);
void reloadThumbs();
protected:
virtual void setupViews();
......
......@@ -236,27 +236,27 @@ void UBGraphicsItemDelegate::setMimeData(QMimeData *mimeData)
bool UBGraphicsItemDelegate::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
if(NULL != mMimeData)
{
QDrag* mDrag = new QDrag(event->widget());
mDrag->setMimeData(mMimeData);
if (!mDragPixmap.isNull()) {
mDrag->setPixmap(mDragPixmap);
mDrag->setHotSpot(mDragPixmap.rect().center());
}
mDrag->exec();
mDragPixmap = QPixmap();
if((NULL != mMimeData) && ((event->pos() - mDragStartPosition).manhattanLength() < QApplication::startDragDistance()))
{
QDrag* mDrag = new QDrag(event->widget());
mDrag->setMimeData(mMimeData);
if (!mDragPixmap.isNull()) {
mDrag->setPixmap(mDragPixmap);
mDrag->setHotSpot(mDragPixmap.rect().center());
}
mDrag->exec();
mDragPixmap = QPixmap();
return true;
}
return true;
}
if(isLocked())
{
event->accept();
return true;
}
else
return false;
return true;
}
bool UBGraphicsItemDelegate::weelEvent(QGraphicsSceneWheelEvent *event)
......@@ -699,4 +699,4 @@ void UBGraphicsToolBarItem::paint(QPainter *painter, const QStyleOptionGraphicsI
path.addRoundedRect(rect(), 10, 10);
painter->fillPath(path, brush());
}
\ No newline at end of file
}
......@@ -109,11 +109,6 @@ void UBGraphicsVideoItem::showOnDisplayChanged(bool shown)
void UBGraphicsVideoItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// QDrag* mDrag = new QDrag(event->widget());
// QMimeData* pMime = new QMimeData();
// mDrag->setMimeData(pMime);
// mDrag->start();
mShouldMove = (event->buttons() & Qt::LeftButton);
mMousePressPos = event->scenePos();
mMouseMovePos = mMousePressPos;
......
......@@ -66,8 +66,8 @@ UBFeaturesActionBar::UBFeaturesActionBar( UBFeaturesController *controller, QWid
mButtonGroup->addButton(mpRemoveFavoriteBtn);
mButtonGroup->addButton(mpNewFolderBtn);
// Connect signals & slots
/*connect(mpFavoriteAction,SIGNAL(triggered()), this, SLOT(onActionFavorite()));
connect(mpSocialAction,SIGNAL(triggered()), this, SLOT(onActionSocial()));
connect(mpFavoriteAction,SIGNAL(triggered()), this, SLOT(onActionFavorite()));
/*connect(mpSocialAction,SIGNAL(triggered()), this, SLOT(onActionSocial()));
connect(mpSearchAction,SIGNAL(triggered()), this, SLOT(onActionSearch()));
connect(mpDeleteAction,SIGNAL(triggered()), this, SLOT(onActionTrash()));
connect(mpCloseAction, SIGNAL(triggered()), this, SLOT(onActionClose()));
......@@ -170,6 +170,11 @@ void UBFeaturesActionBar::onActionNewFolder()
emit newFolderToCreate();
}
void UBFeaturesActionBar::onActionFavorite()
{
emit addElementsToFavorite();
}
/*
void UBFeaturesActionBar::dragMoveEvent(QDragMoveEvent *event)
{
......
......@@ -30,9 +30,11 @@ signals:
void deleteElements( const QMimeData &data );
void addToFavorite( const QMimeData &data );
void removeFromFavorite( const QMimeData &data );
void addElementsToFavorite();
private slots:
void onSearchTextChanged(QString txt);
void onActionNewFolder();
void onActionFavorite();
protected:
//void dragMoveEvent(QDragMoveEvent *event);
void dragEnterEvent( QDragEnterEvent *event );
......
......@@ -116,14 +116,19 @@ UBFeaturesWidget::UBFeaturesWidget(QWidget *parent, const char *name):UBDockPale
this, SLOT(currentSelected(const QModelIndex &)));*/
connect( featuresListView, SIGNAL(clicked ( const QModelIndex & ) ),
this, SLOT( currentSelected(const QModelIndex &) ) );
connect( mActionBar, SIGNAL( searchElement(const QString &) ), this, SLOT( const searchStarted(QString &) ) );
connect( mActionBar, SIGNAL( searchElement(const QString &) ), this, SLOT( searchStarted(const QString &) ) );
connect( mActionBar, SIGNAL( newFolderToCreate() ), this, SLOT( createNewFolder() ) );
connect( mActionBar, SIGNAL( deleteElements(const QMimeData &) ), this, SLOT( deleteElements(const QMimeData &) ) );
connect( mActionBar, SIGNAL( addToFavorite(const QMimeData &) ), this, SLOT( addToFavorite(const QMimeData &) ) );
connect( mActionBar, SIGNAL( removeFromFavorite(const QMimeData &) ), this, SLOT( removeFromFavorite(const QMimeData &) ) );
connect ( mActionBar, SIGNAL( addElementsToFavorite() ), this, SLOT ( addElementsToFavorite() ) );
connect( pathListView, SIGNAL(clicked( const QModelIndex & ) ),
this, SLOT( currentPathChanged( const QModelIndex & ) ) );
connect( thumbSlider, SIGNAL( sliderMoved(int) ), this, SLOT(thumbnailSizeChanged( int ) ) );
connect( UBApplication::boardController, SIGNAL( displayMetadata( QMap<QString,QString> ) ),
this, SLOT( onDisplayMetadata( QMap<QString,QString> ) ) );
connect( UBDownloadManager::downloadManager(), SIGNAL( addDownloadedFileToLibrary( bool, QUrl, QString, QByteArray ) ),
this, SLOT( onAddDownloadedFileToLibrary( bool, QUrl, QString,QByteArray ) ) );
}
bool UBFeaturesWidget::eventFilter( QObject *target, QEvent *event )
......@@ -165,7 +170,7 @@ void UBFeaturesWidget::currentSelected(const QModelIndex &current)
if ( feature.isFolder() )
{
QString newPath = feature.getUrl() + "/" + feature.getName();
QString newPath = feature.getFullVirtualPath();
//pathViewer->addPathElement( feature.getThumbnail(), newPath );
controller->setCurrentElement( feature );
......@@ -208,7 +213,7 @@ void UBFeaturesWidget::currentPathChanged(const QModelIndex &index)
if ( index.isValid() )
{
UBFeature feature = featuresPathModel->data(index, Qt::UserRole + 1).value<UBFeature>();
QString newPath = feature.getUrl() + "/" + feature.getName();
QString newPath = feature.getFullVirtualPath();
featuresPathModel->setPath( newPath );
featuresPathModel->invalidate();
......@@ -281,7 +286,7 @@ void UBFeaturesWidget::addToFavorite( const QMimeData & mimeData )
foreach ( QUrl url, urls )
{
UBFeature elem = controller->addToFavorite( url );
if ( !elem.getUrl().isEmpty() && !elem.getUrl().isNull() )
if ( !elem.getVirtualPath().isEmpty() && !elem.getVirtualPath().isNull() )
featuresModel->addItem( elem );
}
QSortFilterProxyModel *model = dynamic_cast<QSortFilterProxyModel *>( featuresListView->model() );
......@@ -305,6 +310,44 @@ void UBFeaturesWidget::thumbnailSizeChanged( int value )
featuresListView->setGridSize( QSize( value * 1.75, value * 1.75 ) );
}
void UBFeaturesWidget::onDisplayMetadata( QMap<QString,QString> metadata )
{
UBFeature feature( QString(), QPixmap(":images/libpalette/notFound.png"), QString(), metadata["Url"], FEATURE_ITEM );
feature.setMetadata( metadata );
featureProperties->showElement( feature );
switchToProperties();
mActionBar->setCurrentState( IN_PROPERTIES );
}
void UBFeaturesWidget::onAddDownloadedFileToLibrary(bool pSuccess, QUrl sourceUrl, QString pContentHeader, QByteArray pData)
{
if ( pSuccess )
{
UBFeature newFeature = controller->addDownloadedFile( sourceUrl, pData );
if ( newFeature != UBFeature() )
{
featuresModel->addItem( newFeature );
QSortFilterProxyModel *model = dynamic_cast<QSortFilterProxyModel *>( featuresListView->model() );
model->invalidate();
}
}
}
void UBFeaturesWidget::addElementsToFavorite()
{
QModelIndexList selected = featuresListView->selectionModel()->selectedIndexes();
for ( int i = 0; i < selected.size(); ++i )
{
UBFeature feature = selected.at(i).data( Qt::UserRole + 1 ).value<UBFeature>();
UBFeature elem = controller->addToFavorite( feature.getFullPath() );
if ( !elem.getVirtualPath().isEmpty() && !elem.getVirtualPath().isNull() )
featuresModel->addItem( elem );
}
QSortFilterProxyModel *model = dynamic_cast<QSortFilterProxyModel *>( featuresListView->model() );
model->invalidate();
}
void UBFeaturesWidget::switchToListView()
{
stackedWidget->setCurrentIndex(ID_LISTVIEW);
......@@ -376,13 +419,19 @@ void UBFeaturesListView::mouseReleaseEvent( QMouseEvent *event )
*/
void UBFeaturesListView::dragEnterEvent( QDragEnterEvent *event )
{
if ( event->mimeData()->hasUrls() )
if ( event->mimeData()->hasUrls() || event->mimeData()->hasImage() )
event->acceptProposedAction();
}
void UBFeaturesListView::dragMoveEvent( QDragMoveEvent *event )
{
if ( event->mimeData()->hasUrls() || event->mimeData()->hasImage() )
event->acceptProposedAction();
}
void UBFeaturesListView::dropEvent( QDropEvent *event )
{
if( event->source() || dynamic_cast<UBFeaturesListView *>( event->source() ) )
if( event->source() && dynamic_cast<UBFeaturesListView *>( event->source() ) )
{
event->setDropAction( Qt::MoveAction );
}
......@@ -441,7 +490,7 @@ UBFeaturesWebView::~UBFeaturesWebView()
void UBFeaturesWebView::showElement(const UBFeature &elem)
{
QString qsWidgetName;
QString path = elem.getFullPath();
QString path = elem.getFullPath().toLocalFile();
QString qsConfigPath = QString("%0/config.xml").arg(path);
......@@ -490,6 +539,7 @@ UBFeatureProperties::UBFeatureProperties( QWidget *parent, const char *name ) :
, mpThumbnail(NULL)
, mpOrigPixmap(NULL)
, mpElement(NULL)
, mpObjInfos(NULL)
{
setObjectName(name);
......@@ -529,12 +579,49 @@ UBFeatureProperties::UBFeatureProperties( QWidget *parent, const char *name ) :
mpButtonLayout->addStretch(1);
mpObjInfoLabel = new QLabel(tr("Object informations"));
mpObjInfoLabel = new QLabel(tr("Object informations"));
mpObjInfoLabel->setStyleSheet(QString("color: #888888; font-size : 18px; font-weight:bold;"));
mpLayout->addWidget(mpObjInfoLabel, 0);
connect(mpAddPageButton, SIGNAL(clicked()), this, SLOT(onAddToPage()));
mpObjInfos = new QTreeWidget(this);
mpObjInfos->setColumnCount(2);
mpObjInfos->header()->hide();
mpObjInfos->setAlternatingRowColors(true);
mpObjInfos->setRootIsDecorated(false);
mpObjInfos->setObjectName("DockPaletteWidgetBox");
mpObjInfos->setStyleSheet("background:white;");
mpLayout->addWidget(mpObjInfos, 1);
connect( mpAddPageButton, SIGNAL(clicked()), this, SLOT(onAddToPage()) );
connect( mpSetAsBackgroundButton, SIGNAL( clicked() ), this, SLOT( onSetAsBackground() ) );
connect( mpAddToLibButton, SIGNAL( clicked() ), this, SLOT(onAddToLib() ) );
}
void UBFeatureProperties::resizeEvent( QResizeEvent *event )
{
Q_UNUSED(event);
adaptSize();
}
void UBFeatureProperties::showEvent (QShowEvent *event )
{
Q_UNUSED(event);
adaptSize();
}
void UBFeatureProperties::adaptSize()
{
if( NULL != mpOrigPixmap )
{
if( width() < THUMBNAIL_WIDTH + 40 )
{
mpThumbnail->setPixmap( mpOrigPixmap->scaledToWidth( width() - 40 ) );
}
else
{
mpThumbnail->setPixmap( mpOrigPixmap->scaledToWidth( THUMBNAIL_WIDTH ) );
}
}
}
void UBFeatureProperties::showElement( const UBFeature &elem )
......@@ -552,55 +639,81 @@ void UBFeatureProperties::showElement( const UBFeature &elem )
mpElement = new UBFeature( elem );
mpOrigPixmap = new QPixmap( elem.getThumbnail() );
mpThumbnail->setPixmap(elem.getThumbnail().scaledToWidth(THUMBNAIL_WIDTH));
//populateMetadata();
populateMetadata();
if ( UBApplication::isFromWeb( elem.getUrl() ) )
if ( UBApplication::isFromWeb( elem.getFullPath().toString() ) )
{
mpAddToLibButton->show();
/*if(elem->metadatas()["Type"].toLower().contains("image"))
if( elem.getMetadata()["Type"].toLower().contains("image") )
{
mpSetAsBackgroundButton->show();
}
else
{
mpSetAsBackgroundButton->hide();
}*/
}
}
else
{
mpAddToLibButton->hide();
if (UBFileSystemUtils::mimeTypeFromFileName( elem.getUrl() ).contains("image"))
if (UBFileSystemUtils::mimeTypeFromFileName( elem.getFullPath().toLocalFile() ).contains("image"))
{
mpSetAsBackgroundButton->show();
}
else
else
{
mpSetAsBackgroundButton->hide();
}
}
}
void UBFeatureProperties::populateMetadata()
{
if(NULL != mpObjInfos){
mpObjInfos->clear();
QMap<QString, QString> metas = mpElement->getMetadata();
QList<QString> lKeys = metas.keys();
QList<QString> lValues = metas.values();
for(int i=0; i< metas.size(); i++){
QStringList values;
values << lKeys.at(i);
values << lValues.at(i);
mpItem = new QTreeWidgetItem(values);
mpObjInfos->addTopLevelItem(mpItem);
}
mpObjInfos->resizeColumnToContents(0);
}
}
void UBFeatureProperties::onAddToPage()
{
QWidget *w = parentWidget()->parentWidget();
UBFeaturesWidget* featuresWidget = dynamic_cast<UBFeaturesWidget*>( w );
featuresWidget->getFeaturesController()->addItemToPage( *mpElement );
/*if ( UBApplication::isFromWeb( mpElement->getUrl() ) )
{
}
void UBFeatureProperties::onAddToLib()
{
if ( UBApplication::isFromWeb( mpElement->getFullPath().toString() ) )
{
sDownloadFileDesc desc;
desc.isBackground = false;
desc.modal = true;
desc.name = QFileInfo( mpElement->getName() ).fileName();
desc.url = mpElement->getUrl();
desc.modal = false;
desc.name = QFileInfo( mpElement->getFullPath().toString()).fileName();
qDebug() << desc.name;
desc.url = mpElement->getFullPath().toString();
qDebug() << desc.url;
UBDownloadManager::downloadManager()->addFileToDownload(desc);
}
else
{
QWidget *w = parentWidget()->parentWidget();
UBFeaturesWidget* featuresWidget = dynamic_cast<UBFeaturesWidget*>( w );
featuresWidget->getFeaturesController()->addItemToPage( *mpElement );
}*/
}
void UBFeatureProperties::onSetAsBackground()
{
QWidget *w = parentWidget()->parentWidget();
UBFeaturesWidget* featuresWidget = dynamic_cast<UBFeaturesWidget*>( w );
featuresWidget->getFeaturesController()->addItemAsBackground( *mpElement );
}
UBFeatureProperties::~UBFeatureProperties()
......@@ -641,7 +754,7 @@ QVariant UBFeaturesModel::data(const QModelIndex &index, int role) const
}
else if (role == Qt::UserRole)
{
return featuresList->at(index.row()).getUrl();
return featuresList->at(index.row()).getVirtualPath();
}
else if (role == Qt::UserRole + 1)
{
......@@ -663,14 +776,15 @@ QMimeData* UBFeaturesModel::mimeData(const QModelIndexList &indexes) const
if ( index.isValid() )
{
UBFeature element = data( index, Qt::UserRole + 1 ).value<UBFeature>();
if ( element.getType() == FEATURE_INTERNAL )
urlList.push_back( element.getFullPath() );
/*if ( element.getType() == FEATURE_INTERNAL )
{
urlList.push_back( QUrl( element.getFullPath() ) );
}
else if ( element.getType() == FEATURE_INTERACTIVE || element.getType() == FEATURE_ITEM )
{
urlList.push_back( QUrl::fromLocalFile(element.getFullPath()) );
}
urlList.push_back( element.getFullPath() );
}*/
}
}
mimeData->setUrls( urlList );
......@@ -682,7 +796,7 @@ bool UBFeaturesModel::dropMimeData(const QMimeData *mimeData, Qt::DropAction act
{
Q_UNUSED(row)
if ( !mimeData->hasUrls() )
if ( !mimeData->hasUrls() && !mimeData->hasImage() )
return false;
if ( action == Qt::IgnoreAction )
return true;
......@@ -701,29 +815,38 @@ bool UBFeaturesModel::dropMimeData(const QMimeData *mimeData, Qt::DropAction act
parentFeature = parent.data( Qt::UserRole + 1).value<UBFeature>();
}
QList<QUrl> urls = mimeData->urls();
foreach ( QUrl url, urls )
{
UBFeature element;
if ( action == Qt::MoveAction )
{
element = dynamic_cast<UBFeaturesWidget *>(QObject::parent())->getFeaturesController()->moveItemToFolder( url, parentFeature );
}
else
{
element = dynamic_cast<UBFeaturesWidget *>(QObject::parent())->getFeaturesController()->copyItemToFolder( url, parentFeature );
}
addItem( element );
}
if ( mimeData->hasUrls() )
{
QList<QUrl> urls = mimeData->urls();
foreach ( QUrl url, urls )
{
UBFeature element;
if ( action == Qt::MoveAction )
{
element = dynamic_cast<UBFeaturesWidget *>(QObject::parent())->getFeaturesController()->moveItemToFolder( url, parentFeature );
}
else
{
element = dynamic_cast<UBFeaturesWidget *>(QObject::parent())->getFeaturesController()->copyItemToFolder( url, parentFeature );
}
addItem( element );
}
}
else if ( mimeData->hasImage() )
{
QImage image = qvariant_cast<QImage>( mimeData->imageData() );
UBFeature element = dynamic_cast<UBFeaturesWidget *>(QObject::parent())->getFeaturesController()->importImage( image, parentFeature );
addItem( element );
}
return true;
}
void UBFeaturesModel::addItem( const UBFeature &item )
{
beginInsertRows( QModelIndex(), featuresList->size(), featuresList->size() );
featuresList->push_back( item );
featuresList->append( item );
endInsertRows();
}
......@@ -731,8 +854,8 @@ void UBFeaturesModel::deleteFavoriteItem( const QString &path )
{
for ( int i = 0; i < featuresList->size(); ++i )
{
if ( !QString::compare( featuresList->at(i).getFullPath(), path, Qt::CaseInsensitive ) &&
!QString::compare( featuresList->at(i).getUrl(), "/root/favorites", Qt::CaseInsensitive ) )
if ( !QString::compare( featuresList->at(i).getUrl(), path, Qt::CaseInsensitive ) &&
!QString::compare( featuresList->at(i).getVirtualPath(), "/root/favorites", Qt::CaseInsensitive ) )
{
removeRow( i, QModelIndex() );
return;
......@@ -776,7 +899,7 @@ Qt::ItemFlags UBFeaturesModel::flags( const QModelIndex &index ) const
item.getType() == FEATURE_ITEM ||
item.getType() == FEATURE_INTERNAL )
return Qt::ItemIsDragEnabled | defaultFlags;
if ( item.isFolder() && !item.getFullPath().isNull() )
if ( item.isFolder() && !item.getVirtualPath().isNull() )
return defaultFlags | Qt::ItemIsDropEnabled;
else return defaultFlags | Qt::ItemIsDropEnabled;
}
......@@ -804,7 +927,7 @@ Qt::ItemFlags UBFeaturesModel::flags( const QModelIndex &index ) const
QStringList UBFeaturesModel::mimeTypes() const
{
QStringList types;
types << "text/uri-list";
types << "text/uri-list" << "image/png" << "image/tiff" << "image/gif" << "image/jpeg";
return types;
}
......@@ -846,9 +969,8 @@ bool UBFeaturesPathProxyModel::filterAcceptsRow( int sourceRow, const QModelInde
eUBLibElementType type = (eUBLibElementType)sourceModel()->data(index, Qt::UserRole + 1).toInt();*/
UBFeature feature = sourceModel()->data(index, Qt::UserRole + 1).value<UBFeature>();
QString virtualFullPath = feature.getUrl() + "/" + feature.getName();
return feature.isFolder() && path.startsWith( virtualFullPath );
return feature.isFolder() && path.startsWith( feature.getFullVirtualPath() );
}
QString UBFeaturesItemDelegate::displayText ( const QVariant & value, const QLocale & locale ) const
......
......@@ -99,6 +99,9 @@ private slots:
void addToFavorite( const QMimeData & );
void removeFromFavorite( const QMimeData & );
void thumbnailSizeChanged( int );
void onDisplayMetadata( QMap<QString,QString> );
void onAddDownloadedFileToLibrary(bool, QUrl, QString, QByteArray);
void addElementsToFavorite();
protected:
bool eventFilter(QObject *target, QEvent *event);
};
......@@ -112,6 +115,7 @@ public:
protected:
virtual void dragEnterEvent( QDragEnterEvent *event );
virtual void dropEvent( QDropEvent *event );
virtual void dragMoveEvent( QDragMoveEvent *event );
/*virtual void mousePressEvent( QMouseEvent *event );
virtual void mouseMoveEvent( QMouseEvent *event );
virtual void mouseReleaseEvent( QMouseEvent *event );*/
......@@ -150,28 +154,31 @@ public:
protected:
//void resizeEvent(QResizeEvent *event);
//void showEvent(QShowEvent *event);
void resizeEvent(QResizeEvent *event);
void showEvent(QShowEvent *event);
private slots:
void onAddToPage();
//void onAddToLib();
//void onSetAsBackground();
void onAddToLib();
void onSetAsBackground();
//void onBack();
private:
void populateMetadata();
void adaptSize();
QVBoxLayout* mpLayout;
QHBoxLayout* mpButtonLayout;
UBFeatureItemButton* mpAddPageButton;
UBFeatureItemButton* mpAddToLibButton;
UBFeatureItemButton* mpSetAsBackgroundButton;
QLabel* mpObjInfoLabel;
//QTreeWidget* mpObjInfos;
QTreeWidget* mpObjInfos;
QLabel* mpThumbnail;
QPixmap* mpOrigPixmap;
int maxThumbHeight;
UBFeature *mpElement;
//QTreeWidgetItem* mpItem;
QTreeWidgetItem* mpItem;
};
......
......@@ -423,7 +423,7 @@ void UBWebController::setupPalettes()
{
if(!(*mToolsCurrentPalette))
{
(*mToolsCurrentPalette) = new UBWebToolsPalette((*mCurrentWebBrowser),false);
(*mToolsCurrentPalette) = new UBWebToolsPalette(UBApplication::mainWindow, false);
#ifndef Q_WS_WIN
if (UBPlatformUtils::hasVirtualKeyboard() && UBApplication::boardController->paletteManager()->mKeyboardPalette)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment