diff --git a/resources/library/applications/GeoInfo.wgt/js/GeoInfo.js b/resources/library/applications/GeoInfo.wgt/js/GeoInfo.js index c1c5c9c0..c044b672 100644 --- a/resources/library/applications/GeoInfo.wgt/js/GeoInfo.js +++ b/resources/library/applications/GeoInfo.wgt/js/GeoInfo.js @@ -106,7 +106,8 @@ function popupInfo(text) // affiche le text de l'erreur en cas de problème function erreur(texteErreur) { - alert(texteErreur); + //alert(texteErreur); + sankore.showMessage(texteErreur); } // permet d'appeller la fonction pour recevoir les statistiques du serveur @@ -136,7 +137,8 @@ function recevoirStatsReponse(resultat, soapResponse) + "\n" + "Version de l'application: " + objDomTree.getElements("env:Body")[0].getElements("ser:getInfosResponse")[0].getElements("GeoStats")[0].getElements("version")[0].getText()); - alert(stats); + //alert(stats); + sankore.showMessage(stats); } // permet d'appeller la fonction pour recevoir les informations du pays diff --git a/resources/library/applications/GeoInfo.wgt/js/soapclient.js b/resources/library/applications/GeoInfo.wgt/js/soapclient.js index 0c50b23c..66bc3d0a 100644 --- a/resources/library/applications/GeoInfo.wgt/js/soapclient.js +++ b/resources/library/applications/GeoInfo.wgt/js/soapclient.js @@ -155,7 +155,7 @@ SOAPClient._onLoadWsdl = function(url, method, parameters, async, callback, req) } SOAPClient._sendSoapRequest = function(url, method, parameters, async, callback, wsdl) { - alert(); + //alert(); // get namespace var ns = (wsdl.documentElement.attributes["targetNamespace"] + "" == "undefined") ? wsdl.documentElement.attributes.getNamedItem("targetNamespace").nodeValue : wsdl.documentElement.attributes["targetNamespace"].value; // build SOAP request diff --git a/resources/library/search/Image Planete.wgs/css/basic.css b/resources/library/search/Image Planete.wgs/css/basic.css old mode 100644 new mode 100755 index 55549752..f6f77e3c --- a/resources/library/search/Image Planete.wgs/css/basic.css +++ b/resources/library/search/Image Planete.wgs/css/basic.css @@ -1,310 +1,314 @@ -html, body{ - width: 100%; - padding: 0; - height: auto; - background-color: white; - margin: 0; -} - -::-webkit-scrollbar { - width: 14px; - background-color:white; -} - - -::-webkit-scrollbar-thumb { - border-radius: 10px; - background-color:lightgray; - border: 2px solid gray; -} - -::-webkit-scrollbar-button:vertical:start{ - border-radius: 10px; - background-color:lightgray; - background-image: url(../images/trgUp.png); - background-size: 8px auto; - background-position: center; - background-repeat: no-repeat; - border: 2px solid gray; -} - -::-webkit-scrollbar-button:vertical:end{ - border-radius: 10px; - background-color:lightgray; - background-image: url(../images/trgDown.png); - background-size: 8px auto; - background-position: center; - background-repeat: no-repeat; - border: 2px solid gray; -} - -a { - text-decoration: underline; -} - -#disc_nav_cont{ - height: auto; - position: fixed; - left: 0; - bottom: 0; - width: 100%; -} - -.disclaimer{ - padding: 5px; - text-align: center; - background-color: #BBBBBB; - border-top: solid 4px #EEEEEE; - border-bottom: none; - font-size: 12px; -} - -.resultFooter{ - width: 100%; - padding: 3px; - font-family: Verdana,Arial,Helvetica,sans-serif; - font-weight: bold; - font-size: x-large; - text-align: center; - background-color: white; -} - -#searchResult { - overflow: hidden; - text-align: center; - margin-top: 50px; - margin-bottom: 50px; -} - -.search{ - position: fixed; - top: 0; - left: 0; - padding: 5px; - background-color: #BBBBBB; - border-bottom: solid 4px #EEEEEE; -} - -.search, -.disclaimer { - width: 100%; - box-sizing: border-box; - -webkit-box-sizing: border-box; -} - -.searchInput{ - padding: 3px; - float: left; - width: 100%; - border-radius: 3px; - border-style: none; - height: 22px; - line-height: 18px; - vertical-align: middle; - box-sizing: border-box; - -webkit-box-sizing: border-box; -} - -.searchButton{ - background: url("../images/search_app.png") -38px -38px no-repeat; - width: 24px; - height: 24px; - overflow: hidden; - position: absolute; - right: 30px; - top: 9px; - margin-left: -2px; - cursor: pointer; -} - -.subSearch{ - margin: 0; - float: left; -} - -#subSearchInput{ - width: 100%; - float: left; - box-sizing: border-box; - -webkit-box-sizing: border-box; - padding: 5px; - padding-right: 26px; -} - -#subSearchFilter{ - width: 100%; - float: left; - display: none; -} - -.searchResult{ - width: 98%; - padding: 3px; - background-color:#123456; -} - -.imgContainer{ - display: inline-block; - padding: 3px; - margin: 3px; - text-align: center; - overflow: hidden; - font-size: small; - font-family: Verdana,Arial,Helvetica,sans-serif; - vertical-align: top; -} - - -.filterContainer{ - float: left; - margin: 2px; - padding: 2px; - font-size: 14px; - -} - -.filterSelect{ - border-style:none; - -webkit-border-top-right-radius: 15px; - -webkit-border-bottom-right-radius: 15px; - -moz-border-radius-topright: 15px; - -moz-border-radius-bottomright: 15px; - border-top-right-radius: 15px; - margin-top: 2px; - width: 100%; -} - -span{ - font-family: Verdana,Arial,Helvetica,sans-serif; - color: #666; -} - -[draggable] { - -webkit-user-select: none; - user-select: none; -} - -.toggleFilters{ - margin: 0; - padding: 0; - background-position: center; - background-image: url(../images/down.png); - position: absolute; - top: 11px; - right: 6px; - width: 20px; - height: 20px; - cursor: pointer; -} - -.colors_line { - float: left; - margin: 4px; - margin-right: 0; - clear: left; -} - -.custom { - opacity: 0; - position: absolute; - left: -10000px; -} - -.filter_button.button.color { - display: inline-block; - width: 15px; - height: 15px; - border: 1px solid #EBEBEB; - padding: 0; - margin: 0; - box-sizing: border-box; - -webkit-box-sizing: border-box; -} - -.filter_button.button.color:hover { - border: 1px solid rgb(128,128,128); - cursor: pointer; -} - -input[type="radio"]:checked + .filter_button.button.color { - border: 1px solid rgb(255,255,255); - box-shadow: 0 0 0px 1px #000; - -webkit-box-shadow: 0 0 0px 1px #000; -} - -#allcolor { - background: white url('../images/search_app.png') -43px -144px no-repeat; -} - -#colored { - background: white url('../images/search_app.png') -43px -244px no-repeat; -} - -#grayed { - background: white url('../images/search_app.png') -45px -343px no-repeat; -} - -#black{ - background-color:#ffffff; -} -#blue{ - background-color:#0000FF; -} -#brown{ - background-color:rgba(139, 82, 16, 1); -} - -#gray{ - background-color:#999999; -} - -#green{ - background-color:#00CC00; -} - -#orange{ - background-color:#FB940B; -} - -#pink{ - background-color:#FF98BF; -} - -#purple{ - background-color:#762CA7; -} - -#red{ - background-color:#CC0000; -} - -#teal{ - background-color:#03C0C6; -} - -#white{ - background-color:#000000; -} - -#yellow{ - background-color:#FFFF00; -} - -.selectBox-dropdown, .selectBox-options li a { - line-height: 1.3 !important; - font-size: 13px; -} - -.pager_button { - padding: 3px 5px; - font-size: 16px; - color: black; - display: inline-block; -} - -.pager_button.active { - border-radius: 3px; - -webkit-border-radius: 3px; - background-color: gray; - color: white; -} +html, body{ + width: 100%; + padding: 0; + height: auto; + background-color: white; + margin: 0; +} + +::-webkit-scrollbar { + width: 14px; + background-color:white; +} + + +::-webkit-scrollbar-thumb { + border-radius: 10px; + background-color:lightgray; + border: 2px solid gray; +} + +::-webkit-scrollbar-button:vertical:start{ + border-radius: 10px; + background-color:lightgray; + background-image: url(../images/trgUp.png); + background-size: 8px auto; + background-position: center; + background-repeat: no-repeat; + border: 2px solid gray; +} + +::-webkit-scrollbar-button:vertical:end{ + border-radius: 10px; + background-color:lightgray; + background-image: url(../images/trgDown.png); + background-size: 8px auto; + background-position: center; + background-repeat: no-repeat; + border: 2px solid gray; +} + +a { + text-decoration: underline; +} + +#disc_nav_cont{ + height: auto; + position: fixed; + left: 0; + bottom: 0; + width: 100%; +} + +.disclaimer{ + padding: 5px; + text-align: center; + background-color: #BBBBBB; + border-top: solid 4px #EEEEEE; + border-bottom: none; + font-size: 12px; +} + +.resultFooter{ + width: 100%; + padding: 3px; + font-family: Verdana,Arial,Helvetica,sans-serif; + font-weight: bold; + font-size: x-large; + text-align: center; + background-color: white; +} + +#searchResult { + overflow: hidden; + text-align: center; + margin-top: 50px; + margin-bottom: 50px; +} + +.search{ + position: fixed; + top: 0; + left: 0; + padding: 5px; + background-color: #BBBBBB; + border-bottom: solid 4px #EEEEEE; +} + +.search, +.disclaimer { + width: 100%; + box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.searchInput{ + padding: 3px; + float: left; + width: 100%; + border-radius: 3px; + border-style: none; + height: 22px; + line-height: 18px; + vertical-align: middle; + box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.searchButton{ + background: url("../images/search_app.png") -38px -38px no-repeat; + width: 24px; + height: 24px; + overflow: hidden; + position: absolute; + right: 30px; + top: 9px; + margin-left: -2px; + cursor: pointer; +} + +.subSearch{ + margin: 0; + float: left; +} + +#subSearchInput{ + width: 100%; + float: left; + box-sizing: border-box; + -webkit-box-sizing: border-box; + padding: 5px; + padding-right: 26px; +} + +#subSearchFilter{ + width: 100%; + float: left; + display: none; +} + +.searchResult{ + width: 98%; + padding: 3px; + background-color:#123456; +} + +.imgContainer{ + display: inline-block; + padding: 3px; + margin: 3px; + text-align: center; + overflow: hidden; + font-size: small; + font-family: Verdana,Arial,Helvetica,sans-serif; + vertical-align: top; +} + +.imgContainer img{ + max-width: 150px; + max-height:150px; +} + +.filterContainer{ + float: left; + margin: 2px; + padding: 2px; + font-size: 14px; + +} + +.filterSelect{ + border-style:none; + -webkit-border-top-right-radius: 15px; + -webkit-border-bottom-right-radius: 15px; + -moz-border-radius-topright: 15px; + -moz-border-radius-bottomright: 15px; + border-top-right-radius: 15px; + margin-top: 2px; + width: 100%; +} + +span{ + font-family: Verdana,Arial,Helvetica,sans-serif; + color: #666; +} + +[draggable] { + -webkit-user-select: none; + user-select: none; +} + +.toggleFilters{ + margin: 0; + padding: 0; + background-position: center; + background-image: url(../images/down.png); + position: absolute; + top: 11px; + right: 6px; + width: 20px; + height: 20px; + cursor: pointer; +} + +.colors_line { + float: left; + margin: 4px; + margin-right: 0; + clear: left; +} + +.custom { + opacity: 0; + position: absolute; + left: -10000px; +} + +.filter_button.button.color { + display: inline-block; + width: 15px; + height: 15px; + border: 1px solid #EBEBEB; + padding: 0; + margin: 0; + box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.filter_button.button.color:hover { + border: 1px solid rgb(128,128,128); + cursor: pointer; +} + +input[type="radio"]:checked + .filter_button.button.color { + border: 1px solid rgb(255,255,255); + box-shadow: 0 0 0px 1px #000; + -webkit-box-shadow: 0 0 0px 1px #000; +} + +#allcolor { + background: white url('../images/search_app.png') -43px -144px no-repeat; +} + +#colored { + background: white url('../images/search_app.png') -43px -244px no-repeat; +} + +#grayed { + background: white url('../images/search_app.png') -45px -343px no-repeat; +} + +#black{ + background-color:#ffffff; +} +#blue{ + background-color:#0000FF; +} +#brown{ + background-color:rgba(139, 82, 16, 1); +} + +#gray{ + background-color:#999999; +} + +#green{ + background-color:#00CC00; +} + +#orange{ + background-color:#FB940B; +} + +#pink{ + background-color:#FF98BF; +} + +#purple{ + background-color:#762CA7; +} + +#red{ + background-color:#CC0000; +} + +#teal{ + background-color:#03C0C6; +} + +#white{ + background-color:#000000; +} + +#yellow{ + background-color:#FFFF00; +} + +.selectBox-dropdown, .selectBox-options li a { + line-height: 1.3 !important; + font-size: 13px; +} + +.pager_button { + padding: 3px 5px; + font-size: 16px; + color: black; + display: inline-block; +} + +.pager_button.active { + border-radius: 3px; + -webkit-border-radius: 3px; + background-color: gray; + color: white; +} diff --git a/resources/library/search/Image Planete.wgs/images/down.png b/resources/library/search/Image Planete.wgs/images/down.png old mode 100644 new mode 100755 diff --git a/resources/library/search/Image Planete.wgs/images/greySquare.png b/resources/library/search/Image Planete.wgs/images/greySquare.png old mode 100644 new mode 100755 diff --git a/resources/library/search/Image Planete.wgs/images/icon-close.png b/resources/library/search/Image Planete.wgs/images/icon-close.png old mode 100644 new mode 100755 diff --git a/resources/library/search/Image Planete.wgs/images/popupBack.png b/resources/library/search/Image Planete.wgs/images/popupBack.png old mode 100644 new mode 100755 diff --git a/resources/library/search/Image Planete.wgs/images/search.png b/resources/library/search/Image Planete.wgs/images/search.png old mode 100644 new mode 100755 diff --git a/resources/library/search/Image Planete.wgs/images/search_app.png b/resources/library/search/Image Planete.wgs/images/search_app.png old mode 100644 new mode 100755 diff --git a/resources/library/search/Image Planete.wgs/images/trgDown.png b/resources/library/search/Image Planete.wgs/images/trgDown.png old mode 100644 new mode 100755 diff --git a/resources/library/search/Image Planete.wgs/images/trgUp.png b/resources/library/search/Image Planete.wgs/images/trgUp.png old mode 100644 new mode 100755 diff --git a/resources/library/search/Image Planete.wgs/images/up.png b/resources/library/search/Image Planete.wgs/images/up.png old mode 100644 new mode 100755 diff --git a/resources/library/search/Image Planete.wgs/index.html b/resources/library/search/Image Planete.wgs/index.html index 56b9f2c9..8e7214a5 100755 --- a/resources/library/search/Image Planete.wgs/index.html +++ b/resources/library/search/Image Planete.wgs/index.html @@ -1,264 +1,264 @@ - - - - - Planete Sankore Image Search - - - - - - -
- - + + + + + Planete Sankore Image Search + + + + + + +
+ + diff --git a/resources/library/search/Image Planete.wgs/scripts/jquery-1.6.2.min.js b/resources/library/search/Image Planete.wgs/scripts/jquery-1.6.2.min.js old mode 100644 new mode 100755 index 48590ecb..e67db747 --- a/resources/library/search/Image Planete.wgs/scripts/jquery-1.6.2.min.js +++ b/resources/library/search/Image Planete.wgs/scripts/jquery-1.6.2.min.js @@ -1,18 +1,18 @@ -/*! - * jQuery JavaScript Library v1.6.2 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Thu Jun 30 14:16:56 2011 -0400 - */ -(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
t
",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i. -shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j +/*! + * jQuery JavaScript Library v1.6.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Jun 30 14:16:56 2011 -0400 + */ +(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
t
",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i. +shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j )}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/resources/library/videos/Sciences/video_bourgeon.flv b/resources/library/videos/Sciences/video_bourgeon.flv deleted file mode 100755 index ad326000..00000000 Binary files a/resources/library/videos/Sciences/video_bourgeon.flv and /dev/null differ diff --git a/resources/library/videos/Sciences/video_bourgeon.mpg b/resources/library/videos/Sciences/video_bourgeon.mpg new file mode 100644 index 00000000..17419195 Binary files /dev/null and b/resources/library/videos/Sciences/video_bourgeon.mpg differ diff --git a/resources/style.qss b/resources/style.qss index a754c544..46b8dff4 100644 --- a/resources/style.qss +++ b/resources/style.qss @@ -70,6 +70,16 @@ QLabel#UBTGMediaDropMeLabel padding: 2px; } +QComboBox#DockPaletteWidgetComboBox QAbstractItemView +{ + background-color: white; + color: black; + + selection-background-color: lightgreen; + selection-color: black; +} + + QComboBox#DockPaletteWidgetComboBox { background: white; diff --git a/src/adaptors/UBCFFSubsetAdaptor.cpp b/src/adaptors/UBCFFSubsetAdaptor.cpp index bc43b758..52308acd 100644 --- a/src/adaptors/UBCFFSubsetAdaptor.cpp +++ b/src/adaptors/UBCFFSubsetAdaptor.cpp @@ -1049,10 +1049,6 @@ void UBCFFSubsetAdaptor::UBCFFSubsetReader::repositionSvgItem(QGraphicsItem *ite 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(); diff --git a/src/adaptors/UBSvgSubsetAdaptor.cpp b/src/adaptors/UBSvgSubsetAdaptor.cpp index 84b155d9..d76993f9 100644 --- a/src/adaptors/UBSvgSubsetAdaptor.cpp +++ b/src/adaptors/UBSvgSubsetAdaptor.cpp @@ -591,6 +591,7 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene() if(strokesGroup){ polygonItem->setTransform(strokesGroup->transform()); strokesGroup->addToGroup(polygonItem); + polygonItem->setStrokesGroup(strokesGroup); } }else{ mScene->addItem(polygonItem); diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 587a3269..b631f694 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -544,7 +544,8 @@ void UBBoardController::duplicateItem(UBItem *item) QGraphicsItem *commonItem = dynamic_cast(item); if (commonItem) { - itemPos = commonItem->pos(); + qreal shifting = UBSettings::settings()->objectFrameWidth; + itemPos = commonItem->pos() + QPointF(shifting,shifting); itemSize = commonItem->boundingRect().size(); } @@ -612,6 +613,10 @@ void UBBoardController::duplicateItem(UBItem *item) { createdItem->setSourceUrl(item->sourceUrl()); item->copyItemParameters(createdItem); + + QGraphicsItem *createdGitem = dynamic_cast(createdItem); + if (createdGitem) + createdGitem->setPos(itemPos); } } @@ -954,12 +959,12 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri if (!pSuccess) { - UBApplication::showMessage(tr("Downloading content %1 failed").arg(sourceUrl.toString())); + showMessage(tr("Downloading content %1 failed").arg(sourceUrl.toString())); return NULL; } if (!sourceUrl.toString().startsWith("file://") && !sourceUrl.toString().startsWith("uniboardTool://")) - UBApplication::showMessage(tr("Download finished")); + showMessage(tr("Download finished")); if (UBMimeType::RasterImage == itemMimeType) { @@ -1237,7 +1242,7 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri } else { - UBApplication::showMessage(tr("Unknown tool type %1").arg(sourceUrl.toString())); + showMessage(tr("Unknown tool type %1").arg(sourceUrl.toString())); } } else if (sourceUrl.toString().contains("edumedia-sciences.com")) @@ -1292,7 +1297,7 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri } else { - UBApplication::showMessage(tr("Unknown content type %1").arg(pContentTypeHeader)); + showMessage(tr("Unknown content type %1").arg(pContentTypeHeader)); qWarning() << "ignoring mime type" << pContentTypeHeader ; } @@ -1484,8 +1489,12 @@ void UBBoardController::boardViewResized(QResizeEvent* event) mControlView->centerOn(0,0); + if (mDisplayView) + mDisplayView->centerOn(0,0); + mPaletteManager->containerResized(); + UBApplication::boardController->controlView()->scene()->moveMagnifier(); } diff --git a/src/board/UBBoardController.h b/src/board/UBBoardController.h index 7d0404e0..fbb6c3a4 100644 --- a/src/board/UBBoardController.h +++ b/src/board/UBBoardController.h @@ -193,7 +193,7 @@ class UBBoardController : public UBDocumentContainer UBItem *downloadFinished(bool pSuccess, QUrl sourceUrl, QString pHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground = false); void changeBackground(bool isDark, bool isCrossed); void setToolCursor(int tool); - void showMessage(const QString& message, bool showSpinningWheel); + void showMessage(const QString& message, bool showSpinningWheel = false); void hideMessage(); void setDisabled(bool disable); void setColorIndex(int pColorIndex); diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp index 31e0160a..fca5051d 100644 --- a/src/board/UBBoardView.cpp +++ b/src/board/UBBoardView.cpp @@ -71,6 +71,7 @@ UBBoardView::UBBoardView (UBBoardController* pController, QWidget* pParent) , suspendedMousePressEvent(NULL) , mLongPressInterval(1000) , mIsDragInProgress(false) +, mMultipleSelectionIsEnabled(false) { init (); @@ -86,6 +87,7 @@ UBBoardView::UBBoardView (UBBoardController* pController, int pStartLayer, int p , suspendedMousePressEvent(NULL) , mLongPressInterval(1000) , mIsDragInProgress(false) +, mMultipleSelectionIsEnabled(false) { init (); @@ -206,6 +208,11 @@ UBBoardView::keyPressEvent (QKeyEvent *event) mController->addScene (); break; } + case Qt::Key_Control: + case Qt::Key_Shift: + { + mMultipleSelectionIsEnabled = true; + }break; } @@ -266,6 +273,21 @@ UBBoardView::keyPressEvent (QKeyEvent *event) } } + +void UBBoardView::keyReleaseEvent(QKeyEvent *event) +{ + // if (!event->isAccepted ()) + { + if (Qt::Key_Shift == event->key() + ||Qt::Key_Control == event->key()) + { + mMultipleSelectionIsEnabled = false; + } + } + + QGraphicsView::keyReleaseEvent(event); +} + bool UBBoardView::event (QEvent * e) { @@ -424,7 +446,10 @@ bool UBBoardView::itemShouldReceiveMousePressEvent(QGraphicsItem *item) UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool(); if ((currentTool == UBStylusTool::Play) && UBGraphicsGroupContainerItem::Type == movingItem->type()) - return movingItem == NULL; + { + movingItem = NULL; + return false; + } switch(item->type()) { @@ -532,11 +557,7 @@ bool UBBoardView::itemShouldBeMoved(QGraphicsItem *item) return true; case UBGraphicsTextItem::Type: return !item->isSelected(); - - default: - return false; } - return false; } @@ -577,7 +598,8 @@ void UBBoardView::handleItemMousePress(QMouseEvent *event) if (movingItem && QGraphicsSvgItem::Type != movingItem->type() - && UBGraphicsDelegateFrame::Type != movingItem->type()) + && UBGraphicsDelegateFrame::Type != movingItem->type() + && !mMultipleSelectionIsEnabled) { foreach(QGraphicsItem *item, scene()->selectedItems()) { @@ -588,6 +610,9 @@ void UBBoardView::handleItemMousePress(QMouseEvent *event) } } + if (mMultipleSelectionIsEnabled) + return; + if (itemShouldReceiveMousePressEvent(movingItem)) QGraphicsView::mousePressEvent (event); else @@ -945,6 +970,7 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event) if (currentTool == UBStylusTool::Selector) { + bool bReleaseIsNeed = true; if (mWidgetMoved) { mWidgetMoved = false; @@ -958,13 +984,26 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event) QGraphicsView::mousePressEvent(suspendedMousePressEvent); // suspendedMousePressEvent is deleted by old Qt event loop movingItem = NULL; delete suspendedMousePressEvent; - suspendedMousePressEvent = NULL; + suspendedMousePressEvent = NULL; } else { - if ( QGraphicsSvgItem::Type != movingItem->type() - && UBGraphicsDelegateFrame::Type != movingItem->type()) - movingItem->setSelected(true); + if (QGraphicsSvgItem::Type != movingItem->type() && + UBGraphicsDelegateFrame::Type != movingItem->type() && + UBToolWidget::Type != movingItem->type()) + { + bReleaseIsNeed = false; + if (movingItem->isSelected() && mMultipleSelectionIsEnabled) + movingItem->setSelected(false); + else + { + if (movingItem->isSelected()) + bReleaseIsNeed = true; + + movingItem->setSelected(true); + } + + } } } @@ -972,7 +1011,10 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event) mUBRubberBand->hide(); } - QGraphicsView::mouseReleaseEvent (event); + if (bReleaseIsNeed) + { + QGraphicsView::mouseReleaseEvent (event); + } } else if (currentTool == UBStylusTool::Play) { @@ -990,9 +1032,8 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event) delete suspendedMousePressEvent; suspendedMousePressEvent = NULL; } - - QGraphicsView::mouseReleaseEvent (event); } + QGraphicsView::mouseReleaseEvent (event); } else if (currentTool == UBStylusTool::Text) { diff --git a/src/board/UBBoardView.h b/src/board/UBBoardView.h index 0df2dc6e..34cf7fc7 100644 --- a/src/board/UBBoardView.h +++ b/src/board/UBBoardView.h @@ -65,6 +65,7 @@ class UBBoardView : public QGraphicsView virtual bool event (QEvent * e); virtual void keyPressEvent(QKeyEvent *event); + virtual void keyReleaseEvent(QKeyEvent *event); virtual void tabletEvent(QTabletEvent * event); virtual void mouseDoubleClickEvent(QMouseEvent *event); virtual void mousePressEvent(QMouseEvent *event); @@ -145,6 +146,7 @@ class UBBoardView : public QGraphicsView QTimer mLongPressTimer; bool mIsDragInProgress; + bool mMultipleSelectionIsEnabled; private slots: diff --git a/src/board/UBFeaturesController.cpp b/src/board/UBFeaturesController.cpp index e63b04f7..e2d7fa80 100644 --- a/src/board/UBFeaturesController.cpp +++ b/src/board/UBFeaturesController.cpp @@ -21,7 +21,7 @@ const QString UBFeaturesController::virtualRootName = "root"; -void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString & currVirtualPath) +void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString & currVirtualPath, const QSet &pFavoriteSet) { Q_ASSERT(QFileInfo(currentPath.toLocalFile()).exists()); @@ -47,27 +47,29 @@ void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString & emit sendFeature(testFeature); emit featureSent(); + emit scanPath(fullFileName); -// featuresList->append(testFeature); - -// if ( favoriteSet->find( QUrl::fromLocalFile( fullFileName ) ) != favoriteSet->end() ) { -// featuresList->append( UBFeature( favoritePath, icon, fileName, QUrl::fromLocalFile( fullFileName ), featureType ) ); -// } + if ( pFavoriteSet.find(QUrl::fromLocalFile(fullFileName)) != pFavoriteSet.end()) { + //TODO send favoritePath from the controller or make favoritePath public and static + emit sendFeature(UBFeature( "/root/Favorites", icon, fileName, QUrl::fromLocalFile(fullFileName), featureType)); + } if (featureType == FEATURE_FOLDER) { - scanFS(QUrl::fromLocalFile(fullFileName), currVirtualPath + "/" + fileName); + scanFS(QUrl::fromLocalFile(fullFileName), currVirtualPath + "/" + fileName, pFavoriteSet); } } } -void UBFeaturesComputingThread::scanAll(QList > pScanningData) +void UBFeaturesComputingThread::scanAll(QList > pScanningData, const QSet &pFavoriteSet) { for (int i = 0; i < pScanningData.count(); i++) { if (abort) { return; } QPair curPair = pScanningData.at(i); - scanFS(curPair.first, curPair.second); + + emit scanCategory(UBFeaturesController::categoryNameForVirtualPath(curPair.second)); + scanFS(curPair.first, curPair.second, pFavoriteSet); } } @@ -84,8 +86,6 @@ int UBFeaturesComputingThread::featuresCount(const QUrl &pPath) if (featureType != FEATURE_INVALID && !fullFileName.contains(".thumbnail.")) { noItems++; - } else { - continue; } if (featureType == FEATURE_FOLDER) { @@ -114,11 +114,12 @@ QThread(parent) abort = false; } -void UBFeaturesComputingThread::compute(const QList > &pScanningData) +void UBFeaturesComputingThread::compute(const QList > &pScanningData, QSet *pFavoritesSet) { QMutexLocker curLocker(&mMutex); mScanningData = pScanningData; + mFavoriteSet = *pFavoritesSet; if (!isRunning()) { start(LowPriority); @@ -135,6 +136,7 @@ void UBFeaturesComputingThread::run() mMutex.lock(); QList > searchData = mScanningData; + QSet favoriteSet = mFavoriteSet; mMutex.unlock(); if (abort) { @@ -152,7 +154,7 @@ void UBFeaturesComputingThread::run() emit maxFilesCountEvaluated(fsCnt); emit scanStarted(); - scanAll(searchData); + scanAll(searchData, favoriteSet); emit scanFinished(); mMutex.lock(); @@ -210,9 +212,12 @@ bool UBFeature::isFolder() const || elementType == FEATURE_FOLDER; } -bool UBFeature::isDeletable()const +bool UBFeature::isDeletable() const { return elementType == FEATURE_ITEM + || elementType == FEATURE_AUDIO + || elementType == FEATURE_VIDEO + || elementType == FEATURE_IMAGE || elementType == FEATURE_FOLDER; } @@ -238,6 +243,7 @@ UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) : shapesPath = rootPath + "/Shapes"; trashPath = rootPath + "/Trash"; favoritePath = rootPath + "/Favorites"; + webSearchPath = rootPath + "/Web search"; //Initializing physical directories from UBSettings mUserAudioDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userAudioDirectory()); @@ -295,11 +301,10 @@ UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) : connect(&mCThread, SIGNAL(scanStarted()), this, SIGNAL(scanStarted())); connect(&mCThread, SIGNAL(scanFinished()), this, SIGNAL(scanFinished())); connect(&mCThread, SIGNAL(maxFilesCountEvaluated(int)), this, SIGNAL(maxFilesCountEvaluated(int))); - //Very unsafe function. Considering using deleteLater() instead -// connect(qApp, SIGNAL(aboutToQuit()), &mCThread, SLOT(terminate())); + connect(&mCThread, SIGNAL(scanCategory(QString)), this, SIGNAL(scanCategory(QString))); + connect(&mCThread, SIGNAL(scanPath(QString)), this, SIGNAL(scanPath(QString))); QTimer::singleShot(0, this, SLOT(startThread())); -// startThread(); } void UBFeaturesController::startThread() @@ -323,7 +328,7 @@ void UBFeaturesController::startThread() << QPair(trashDirectoryPath, trashPath) << QPair(mLibSearchDirectoryPath, rootPath + "/" + "Web search" ); - mCThread.compute(computingData); + mCThread.compute(computingData, favoriteSet); } void UBFeaturesController::scanFS() @@ -342,6 +347,7 @@ void UBFeaturesController::scanFS() << webSearchElement << trashElement; + //filling favoriteList loadFavoriteList(); QList tools = UBToolsManager::manager()->allTools(); @@ -350,54 +356,9 @@ void UBFeaturesController::scanFS() featuresList->append(UBFeature(appPath, tool.icon.toImage(), tool.label, QUrl(tool.id), FEATURE_INTERNAL)); if (favoriteSet->find(QUrl(tool.id)) != favoriteSet->end()) { featuresList->append(UBFeature(favoritePath, tool.icon.toImage(), tool.label, QUrl(tool.id), FEATURE_INTERNAL)); - } - } - QTime time = QTime::currentTime(); - //Claudio: - // don't change the order of the scans -// fileSystemScan( mLibAudiosDirectoryPath, audiosPath); -// fileSystemScan( mLibVideosDirectoryPath, moviesPath); -// fileSystemScan( mLibAnimationsDirectoryPath, flashPath); -// fileSystemScan( mLibPicturesDirectoryPath, picturesPath ); - -// fileSystemScan( mUserInteractiveDirectoryPath, appPath ); -// fileSystemScan( mUserAudioDirectoryPath, audiosPath ); -// fileSystemScan( mUserPicturesDirectoryPath, picturesPath ); -// fileSystemScan( mUserVideoDirectoryPath, moviesPath ); -// fileSystemScan( mUserAnimationDirectoryPath, flashPath ); - -// fileSystemScan( mLibApplicationsDirectoryPath, appPath ); -// fileSystemScan( mLibShapesDirectoryPath, shapesPath ); -// fileSystemScan( mLibInteractiveDirectoryPath, interactPath ); -// fileSystemScan( trashDirectoryPath, trashPath ); -// fileSystemScan( mLibSearchDirectoryPath, rootPath + "/" + "Web search" ); - - int i =0; - - i += featuresCount(mLibAudiosDirectoryPath); - i += featuresCount(mLibVideosDirectoryPath); - i += featuresCount(mLibAnimationsDirectoryPath); - i += featuresCount(mLibPicturesDirectoryPath); - - i += featuresCount(mUserInteractiveDirectoryPath); - i += featuresCount(mUserAudioDirectoryPath); - i += featuresCount(mUserPicturesDirectoryPath); - i += featuresCount(mUserVideoDirectoryPath); - i += featuresCount(mUserAnimationDirectoryPath); - - i += featuresCount(mLibApplicationsDirectoryPath); - i += featuresCount(mLibShapesDirectoryPath); - i += featuresCount(mLibInteractiveDirectoryPath); - i += featuresCount(trashDirectoryPath); - i += featuresCount(mLibSearchDirectoryPath); - - int msecs = QTime(time).msecsTo(QTime::currentTime()); - qDebug() << "Loading library" << msecs << "msecs\nNumber of elements" << i; - -// emit TopIndexingLimitSet(i); -// emit indexingProgressValueChanged(i / 4); + } + } } - void UBFeaturesController::fileSystemScan(const QUrl & currentPath, const QString & currVirtualPath) { QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(currentPath.toLocalFile()); @@ -492,7 +453,8 @@ void UBFeaturesController::addToFavorite( const QUrl &path ) { QFileInfo fileInfo( filePath ); QString fileName = fileInfo.fileName(); - UBFeature elem(favoritePath, getIcon( filePath, FEATURE_CATEGORY ), fileName, path, fileTypeFromUrl(filePath) ); + UBFeatureElementType type = fileTypeFromUrl(fileInfo.absoluteFilePath()); + UBFeature elem(favoritePath, getIcon(filePath, type), fileName, path, fileTypeFromUrl(filePath) ); favoriteSet->insert( path ); saveFavoriteList(); @@ -524,7 +486,7 @@ QString UBFeaturesController::fileNameFromUrl( const QUrl &url ) } -UBFeatureElementType UBFeaturesController::fileTypeFromUrl( const QString &path ) +UBFeatureElementType UBFeaturesController::fileTypeFromUrl(const QString &path) { QFileInfo fileInfo(path); @@ -535,7 +497,7 @@ UBFeatureElementType UBFeaturesController::fileTypeFromUrl( const QString &path QString fileName = fileInfo.fileName(); QString mimeString = UBFileSystemUtils::mimeTypeFromFileName(fileName); - UBFeatureElementType fileType = fileInfo.isDir() ? FEATURE_FOLDER : FEATURE_ITEM; + UBFeatureElementType fileType = FEATURE_INVALID; if ( mimeString.contains("application")) { if (mimeString.contains("application/search")) { @@ -545,7 +507,17 @@ UBFeatureElementType UBFeaturesController::fileTypeFromUrl( const QString &path } } else if ( path.contains("uniboardTool://")) { fileType = FEATURE_INTERNAL; - } + } else if (mimeString.contains("audio")) { + fileType = FEATURE_AUDIO; + } else if (mimeString.contains("video")) { + fileType = FEATURE_VIDEO; + } else if (mimeString.contains("image")) { + fileType = FEATURE_IMAGE; + } else if (fileInfo.isDir()) { + fileType = FEATURE_FOLDER; + } else { + fileType = FEATURE_INVALID; + } return fileType; } @@ -554,64 +526,65 @@ QImage UBFeaturesController::getIcon(const QString &path, UBFeatureElementType p { if (pFType == FEATURE_FOLDER) { return QImage(":images/libpalette/folder.svg"); - - } else if (pFType == FEATURE_INTERACTIVE) { + } else if (pFType == FEATURE_INTERACTIVE || pFType == FEATURE_SEARCH) { return QImage(UBGraphicsWidgetItem::iconFilePath(QUrl::fromLocalFile(path))); + } else if (pFType == FEATURE_INTERNAL) { + return QImage(UBToolsManager::manager()->iconFromToolId(path)); + } else if (pFType == FEATURE_AUDIO) { + return QImage(":images/libpalette/soundIcon.svg"); + } else if (pFType == FEATURE_VIDEO) { + return QImage(":images/libpalette/movieIcon.svg"); + } else if (pFType == FEATURE_IMAGE) { + QImage pix(path); + if (pix.isNull()) { + pix = QImage(":images/libpalette/notFound.png"); + } else { + pix = pix.scaledToWidth(qMin(UBSettings::maxThumbnailWidth, pix.width())); + } + return pix; } - - if ( path.contains("uniboardTool://") ) { - return QImage( UBToolsManager::manager()->iconFromToolId(path) ); - - } if ( UBFileSystemUtils::mimeTypeFromFileName(path).contains("application")) { - return QImage( UBGraphicsWidgetItem::iconFilePath( QUrl::fromLocalFile(path) ) ); - } - - QImage thumb; - QString thumbnailPath = UBFileSystemUtils::thumbnailPath(path); - - if ( QFileInfo( thumbnailPath ).exists() ) - thumb = QImage( thumbnailPath ); - else thumb = createThumbnail( path ); - - return thumb; + return QImage(":images/libpalette/notFound.png"); } bool UBFeaturesController::isDeletable( const QUrl &url ) { - UBFeatureElementType type = fileTypeFromUrl( fileNameFromUrl(url) ); - return type == FEATURE_ITEM; + UBFeatureElementType type = fileTypeFromUrl(fileNameFromUrl(url)); + return type == FEATURE_AUDIO + || type == FEATURE_VIDEO + || type == FEATURE_IMAGE + || type == FEATURE_ITEM; +} + +QString UBFeaturesController::categoryNameForVirtualPath(const QString &str) +{ + QString result; + int ind = str.lastIndexOf("/"); + if (ind != -1) { + result = str.right(str.count() - ind - 1); + } + return result; } QImage UBFeaturesController::createThumbnail(const QString &path) { - QString thumbnailPath = UBFileSystemUtils::thumbnailPath(path); + QString thumbnailPath = path; QString mimetype = UBFileSystemUtils::mimeTypeFromFileName(path); - QString extension = QFileInfo(path).completeSuffix(); - if ( mimetype.contains("audio" )) + if ( mimetype.contains("audio" )) { thumbnailPath = ":images/libpalette/soundIcon.svg"; - else if ( mimetype.contains("video") ) + } else if ( mimetype.contains("video")) { thumbnailPath = ":images/libpalette/movieIcon.svg"; - else - { - if ( extension.startsWith("svg", Qt::CaseInsensitive) || extension.startsWith("svgz", Qt::CaseInsensitive) ) - { - thumbnailPath = path; - } - else - { - QImage pix(path); - if (!pix.isNull()) - { - pix = pix.scaledToWidth(qMin(UBSettings::maxThumbnailWidth, pix.width()), Qt::SmoothTransformation); - pix.save(thumbnailPath); - UBPlatformUtils::hideFile(thumbnailPath); - } - else{ - thumbnailPath = ":images/libpalette/notFound.png"; - } + } else { + QImage pix(path); + if (!pix.isNull()) { + pix = pix.scaledToWidth(qMin(UBSettings::maxThumbnailWidth, pix.width()), Qt::SmoothTransformation); + return pix; + + } else { + thumbnailPath = ":images/libpalette/notFound.png"; } + } return QImage(thumbnailPath); diff --git a/src/board/UBFeaturesController.h b/src/board/UBFeaturesController.h index 64bbd5cc..9a551363 100644 --- a/src/board/UBFeaturesController.h +++ b/src/board/UBFeaturesController.h @@ -33,7 +33,7 @@ class UBFeaturesComputingThread : public QThread public: explicit UBFeaturesComputingThread(QObject *parent = 0); virtual ~UBFeaturesComputingThread(); - void compute(const QList > &pScanningData); + void compute(const QList > &pScanningData, QSet *pFavoritesSet); protected: void run(); @@ -44,12 +44,14 @@ signals: void scanStarted(); void scanFinished(); void maxFilesCountEvaluated(int max); + void scanCategory(const QString &str); + void scanPath(const QString &str); public slots: private: - void scanFS(const QUrl & currentPath, const QString & currVirtualPath); - void scanAll(QList > pScanningData); + void scanFS(const QUrl & currentPath, const QString & currVirtualPath, const QSet &pFavoriteSet); + void scanAll(QList > pScanningData, const QSet &pFavoriteSet); int featuresCount(const QUrl &pPath); int featuresCountAll(QList > pScanningData); @@ -59,6 +61,7 @@ private: QUrl mScanningPath; QString mScanningVirtualPath; QList > mScanningData; + QSet mFavoriteSet; bool restart; bool abort; }; @@ -72,6 +75,9 @@ enum UBFeatureElementType FEATURE_INTERACTIVE, FEATURE_INTERNAL, FEATURE_ITEM, + FEATURE_AUDIO, + FEATURE_VIDEO, + FEATURE_IMAGE, FEATURE_TRASH, FEATURE_FAVORITE, FEATURE_SEARCH, @@ -107,6 +113,7 @@ public: private: QString virtualDir; + QString virtualPath; QImage mThumbnail; QString mName; QUrl mPath; @@ -167,6 +174,7 @@ public: static QImage getIcon( const QString &path, UBFeatureElementType pFType ); static bool isDeletable( const QUrl &url ); static char featureTypeSplitter() {return ':';} + static QString categoryNameForVirtualPath(const QString &str); static const QString virtualRootName; @@ -178,6 +186,8 @@ signals: void scanStarted(); void scanFinished(); void featureAddedFromThread(); + void scanCategory(const QString &); + void scanPath(const QString &); private slots: void addNewFolder(QString name); @@ -233,6 +243,7 @@ private: QString interactPath; QString trashPath; QString favoritePath; + QString webSearchPath; int mLastItemOffsetIndex; UBFeature currentElement; diff --git a/src/core/UB.h b/src/core/UB.h index 78241f46..e486d86c 100644 --- a/src/core/UB.h +++ b/src/core/UB.h @@ -142,7 +142,8 @@ struct UBGraphicsItemType TriangleItemType, MagnifierItemType, cacheItemType, - groupContainerType + groupContainerType, + ToolWidgetItemType }; }; diff --git a/src/document/UBDocumentController.cpp b/src/document/UBDocumentController.cpp old mode 100644 new mode 100755 index e7a50345..1fe4763c --- a/src/document/UBDocumentController.cpp +++ b/src/document/UBDocumentController.cpp @@ -385,7 +385,12 @@ void UBDocumentController::setupViews() mDocumentUI->thumbnailWidget->setBackgroundBrush(UBSettings::documentViewLightColor); - mMessageWindow = new UBMessageWindow(mDocumentUI->thumbnailWidget); + #ifdef Q_WS_MACX + mMessageWindow = new UBMessageWindow(NULL); + #else + mMessageWindow = new UBMessageWindow(mDocumentUI->thumbnailWidget); + #endif + mMessageWindow->hide(); } @@ -623,7 +628,7 @@ void UBDocumentController::deleteSelectedItem() toBeDeleted << proxyTi; } - UBApplication::showMessage(tr("Emptying trash")); + showMessage(tr("Emptying trash")); for (int i = 0; i < toBeDeleted.count(); i++) { @@ -633,7 +638,7 @@ void UBDocumentController::deleteSelectedItem() UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy()); } - UBApplication::showMessage(tr("Emptied trash")); + showMessage(tr("Emptied trash")); QApplication::restoreOverrideCursor(); mMainWindow->actionDelete->setEnabled(false); @@ -683,7 +688,7 @@ void UBDocumentController::deleteSelectedItem() { UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i); - UBApplication::showMessage(QString("Deleting %1").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString())); + showMessage(QString("Deleting %1").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString())); // Move document to trash QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString(); proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName); @@ -693,7 +698,7 @@ void UBDocumentController::deleteSelectedItem() mTrashTi->addChild(proxyTi); proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable); - UBApplication::showMessage(QString("%1 deleted").arg(groupTi->groupName())); + showMessage(QString("%1 deleted").arg(groupTi->groupName())); } // dont remove default group @@ -732,7 +737,7 @@ void UBDocumentController::exportDocument() } else { - UBApplication::showMessage(tr("No document selected!")); + showMessage(tr("No document selected!")); } } @@ -917,7 +922,7 @@ void UBDocumentController::importFile() if (groupName == UBSettings::defaultDocumentGroupName || fileInfo.suffix() != "ubz") groupName = ""; - UBApplication::showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true); + showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true); createdDocument = docManager->importFile(selectedFile, groupName); @@ -927,7 +932,7 @@ void UBDocumentController::importFile() } else { - UBApplication::showMessage(tr("Failed to import file ... ")); + showMessage(tr("Failed to import file ... ")); } } @@ -958,7 +963,7 @@ void UBDocumentController::addFolderOfImages() if (importedImageNumber == 0) { - UBApplication::showMessage(tr("Folder does not contain any image files!")); + showMessage(tr("Folder does not contain any image files!")); UBApplication::applicationController->showDocument(); } else @@ -1003,7 +1008,7 @@ bool UBDocumentController::addFileToDocument(UBDocumentProxy* document) QApplication::processEvents(); QFile selectedFile(filePath); - UBApplication::showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true); + showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true); success = UBDocumentManager::documentManager()->addFileToDocument(document, selectedFile); @@ -1014,7 +1019,7 @@ bool UBDocumentController::addFileToDocument(UBDocumentProxy* document) } else { - UBApplication::showMessage(tr("Failed to import file ... ")); + showMessage(tr("Failed to import file ... ")); } } @@ -1382,13 +1387,19 @@ bool UBDocumentController::isOKToOpenDocument(UBDocumentProxy* proxy) void UBDocumentController::showMessage(const QString& message, bool showSpinningWheel) { - int margin = UBSettings::boardMargin; - - QRect newSize = mDocumentUI->thumbnailWidget->geometry(); - if (mMessageWindow) { - mMessageWindow->move(margin, newSize.height() - mMessageWindow->height() - margin); + int margin = UBSettings::boardMargin; + + QRect newSize = mDocumentUI->thumbnailWidget->geometry(); + + #ifdef Q_WS_MACX + QPoint point(newSize.left() + margin, newSize.bottom() - mMessageWindow->height() - margin); + mMessageWindow->move(mDocumentUI->thumbnailWidget->mapToGlobal(point)); + #else + mMessageWindow->move(margin, newSize.height() - mMessageWindow->height() - margin); + #endif + mMessageWindow->showMessage(message, showSpinningWheel); } } @@ -1609,9 +1620,9 @@ void UBDocumentController::refreshDocumentThumbnailsView(UBDocumentContainer*) QStringList labels; - if (proxy) + if (proxy) { - setDocument(proxy); + setDocument(proxy); for (int i = 0; i < selectedDocument()->pageCount(); i++) { diff --git a/src/document/UBDocumentController.h b/src/document/UBDocumentController.h index 29077c4d..d27ca0a6 100644 --- a/src/document/UBDocumentController.h +++ b/src/document/UBDocumentController.h @@ -71,7 +71,7 @@ class UBDocumentController : public UBDocumentContainer void selectDocument(UBDocumentProxy* proxy, bool setAsCurrentDocument = true); void show(); void hide(); - void showMessage(const QString& message, bool showSpinningWheel); + void showMessage(const QString& message, bool showSpinningWheel = false); void hideMessage(); void toggleDocumentToolsPalette(); void cut(); diff --git a/src/domain/UBAngleWidget.cpp b/src/domain/UBAngleWidget.cpp deleted file mode 100644 index 7be0bf39..00000000 --- a/src/domain/UBAngleWidget.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include "UBAngleWidget.h" -#include - -#include "core/memcheck.h" - -UBAngleWidget::UBAngleWidget(QWidget *parent) - : QWidget(parent) -{ - this->setFixedSize(45,30); - this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); - this->setAttribute(Qt::WA_TranslucentBackground); - - QImage mask_img(width(), height(), QImage::Format_Mono); - mask_img.fill(0xff); - QPainter mask_ptr(&mask_img); - mask_ptr.setBrush( QBrush( QColor(0, 0, 0) ) ); - mask_ptr.drawRoundedRect(0,0,this->geometry().width() - 6,this->geometry().height() - 6,1,1); - bmpMask = QBitmap::fromImage(mask_img); - this->setMask(bmpMask); -} - -UBAngleWidget::~UBAngleWidget() -{ - -} - -void UBAngleWidget::paintEvent(QPaintEvent *event) -{ - Q_UNUSED(event); - - this->move(this->cursor().pos().x(), this->cursor().pos().y() - 30); - - QPainter painter(this); - painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); - QBrush brush(Qt::white); - painter.setBrush(brush); - painter.drawRoundedRect(1,1,this->geometry().width() - 10,this->geometry().height() - 10,1,1); - - painter.setPen(QColor(85,50,127)); - painter.setFont(QFont("Arial", 10)); - painter.drawText(1,1,this->geometry().width() - 10,this->geometry().height() - 10, Qt::AlignCenter, text); -} - -void UBAngleWidget::setText(QString newText) -{ - text = newText; - text.append(QChar(176)); -} \ No newline at end of file diff --git a/src/domain/UBAngleWidget.h b/src/domain/UBAngleWidget.h deleted file mode 100644 index 20b09431..00000000 --- a/src/domain/UBAngleWidget.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef UBANGLEWIDGET_H -#define UBANGLEWIDGET_H - -#include -#include - -class UBAngleWidget : public QWidget -{ - Q_OBJECT - -public: - UBAngleWidget(QWidget *parent = 0); - ~UBAngleWidget(); - - void setText(QString); - -protected: - void paintEvent(QPaintEvent *event); - -private: - QString text; - QBitmap bmpMask; -}; - -#endif // UBANGLEWIDGET_H diff --git a/src/domain/UBGraphicsDelegateFrame.cpp b/src/domain/UBGraphicsDelegateFrame.cpp index 031999b3..e2181020 100644 --- a/src/domain/UBGraphicsDelegateFrame.cpp +++ b/src/domain/UBGraphicsDelegateFrame.cpp @@ -21,6 +21,9 @@ #include "core/UBApplication.h" #include "core/UBSettings.h" +#include "board/UBBoardController.h" +#include "board/UBBoardView.h" + #include "domain/UBGraphicsItemDelegate.h" #include "domain/UBGraphicsScene.h" #include "domain/UBGraphicsProxyWidget.h" @@ -90,14 +93,11 @@ UBGraphicsDelegateFrame::UBGraphicsDelegateFrame(UBGraphicsItemDelegate* pDelega positionHandles(); this->setAcceptHoverEvents(true); - - angleWidget = new UBAngleWidget(); } UBGraphicsDelegateFrame::~UBGraphicsDelegateFrame() { -delete angleWidget; // NOOP } @@ -226,10 +226,46 @@ void UBGraphicsDelegateFrame::mousePressEvent(QGraphicsSceneMouseEvent *event) mInitialTransform = buildTransform(); mCurrentTool = toolFromPos(event->pos()); - + setCursorFromAngle(QString("")); event->accept(); } +void UBGraphicsDelegateFrame::setCursorFromAngle(QString angle) +{ + if (mCurrentTool == Rotate) + { + QWidget *controlViewport = UBApplication::boardController->controlView()->viewport(); + + QSize cursorSize(45,30); + + + QImage mask_img(cursorSize, QImage::Format_Mono); + mask_img.fill(0xff); + QPainter mask_ptr(&mask_img); + mask_ptr.setBrush( QBrush( QColor(0, 0, 0) ) ); + mask_ptr.drawRoundedRect(0,0, cursorSize.width()-1, cursorSize.height()-1, 6, 6); + QBitmap bmpMask = QBitmap::fromImage(mask_img); + + + QPixmap pixCursor(cursorSize); + pixCursor.fill(QColor(Qt::white)); + + QPainter painter(&pixCursor); + + painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); + painter.setBrush(QBrush(Qt::white)); + painter.setPen(QPen(QColor(Qt::black))); + painter.drawRoundedRect(1,1,cursorSize.width()-2,cursorSize.height()-2,6,6); + painter.setFont(QFont("Arial", 10)); + painter.drawText(1,1,cursorSize.width(),cursorSize.height(), Qt::AlignCenter, angle.append(QChar(176))); + painter.end(); + + pixCursor.setMask(bmpMask); + controlViewport->setCursor(pixCursor); + } +} + + bool UBGraphicsDelegateFrame::canResizeBottomRight(qreal width, qreal height, qreal scaleFactor) { bool res = false; @@ -427,12 +463,7 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) } } - if (!angleWidget->isVisible()) - angleWidget->show(); - - angleWidget->setText(QString::number((int)mAngle % 360)); - angleWidget->update(); - + setCursorFromAngle(QString::number((int)mAngle % 360)); } else if (moving()) { @@ -525,9 +556,6 @@ QTransform UBGraphicsDelegateFrame::buildTransform() void UBGraphicsDelegateFrame::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - if (angleWidget->isVisible()) - angleWidget->hide(); - updateResizeCursors(); mDelegate->commitUndoStep(); diff --git a/src/domain/UBGraphicsDelegateFrame.h b/src/domain/UBGraphicsDelegateFrame.h index 8ffac3e7..b08ae219 100644 --- a/src/domain/UBGraphicsDelegateFrame.h +++ b/src/domain/UBGraphicsDelegateFrame.h @@ -18,7 +18,6 @@ #include #include "core/UB.h" -#include "domain/UBAngleWidget.h" class QGraphicsSceneMouseEvent; class UBGraphicsItemDelegate; @@ -65,6 +64,7 @@ class UBGraphicsDelegateFrame: public QGraphicsRectItem, public QObject inline bool resizingTop () const { return mCurrentTool == ResizeTop; } inline bool rotating () const { return mCurrentTool == Rotate; } inline bool moving () const { return mCurrentTool == Move; } + void setCursorFromAngle(QString angle); bool canResizeBottomRight(qreal width, qreal height, qreal scaleFactor); QTransform buildTransform (); @@ -120,8 +120,5 @@ class UBGraphicsDelegateFrame: public QGraphicsRectItem, public QObject bool mResizing; bool mMirroredXAtStart; bool mMirroredYAtStart; - - UBAngleWidget *angleWidget; - }; #endif /* UBGRAPHICSDELEGATEFRAME_H_ */ diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index 4556cb0c..e3986e2a 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -418,10 +418,6 @@ bool UBGraphicsItemDelegate::isLocked() void UBGraphicsItemDelegate::duplicate() { - // TODO UB 4.x .. rewrite .. .this is absurde ... we know what we are duplicating - - UBApplication::boardController->copy(); - UBApplication::boardController->paste(); UBApplication::boardController->duplicateItem(dynamic_cast(delegated())); } @@ -1134,6 +1130,7 @@ DelegateMediaControl::DelegateMediaControl(UBGraphicsMediaItem* pDelegated, QGra , mCurrentTimeInMs(0) , mTotalTimeInMs(0) , mStartWidth(200) + , mSeecAreaBorderHeight(0) { setAcceptedMouseButtons(Qt::LeftButton); setBrush(QBrush(Qt::white)); @@ -1157,13 +1154,14 @@ void DelegateMediaControl::paint(QPainter *painter, mLCDTimerArea.setHeight(rect().height()); mLCDTimerArea.setWidth(rect().height()); - mSeecArea = rect(); mSeecArea.setWidth(rect().width()-mLCDTimerArea.width()-2); + mSeecArea.setHeight(rect().height()-2*mSeecAreaBorderHeight); + mSeecArea.setY(mSeecAreaBorderHeight); path.addRoundedRect(mSeecArea, mSeecArea.height()/2, mSeecArea.height()/2); painter->fillPath(path, brush()); - qreal frameWidth = rect().height() / 2; + qreal frameWidth = mSeecArea.height() / 2; int position = frameWidth; if (mTotalTimeInMs > 0) @@ -1173,7 +1171,7 @@ void DelegateMediaControl::paint(QPainter *painter, int clearance = 2; int radius = frameWidth-clearance; - QRectF r(position - radius, clearance, radius * 2, radius * 2); + QRectF r(position - radius, clearance+mSeecAreaBorderHeight, radius * 2, radius * 2); painter->setBrush(UBSettings::documentViewLightColor); painter->drawEllipse(r); @@ -1193,18 +1191,17 @@ void DelegateMediaControl::positionHandles() mLCDTimerArea.setHeight(parentItem()->boundingRect().height()); lcdTimer->setRect(mLCDTimerArea); lcdTimer->setPos(mSeecArea.width()-mLCDTimerArea.width(),0); - //lcdTimer->setRect(mLCDTimerArea); - //lcdTimer->setPos(mSeecArea.width()-mLCDTimerArea.width(),0); - mSeecArea.setWidth(rect().width()-mLCDTimerArea.width()); + mSeecAreaBorderHeight = rect().height()/20; + mSeecArea.setWidth(rect().width()-mLCDTimerArea.width()-2); + mSeecArea.setHeight(rect().height()-2*mSeecAreaBorderHeight); + mSeecArea.setY(mSeecAreaBorderHeight); QRectF selfRect = rect(); selfRect.setHeight(parentItem()->boundingRect().height()); setRect(selfRect); lcdTimer->setPos(rect().width() - mLCDTimerArea.width(), 0); - //lcdTimer->setPos(rect().width() - mLCDTimerArea.width(), 0); - } void DelegateMediaControl::update() @@ -1212,7 +1209,6 @@ void DelegateMediaControl::update() QTime t; t = t.addMSecs(mCurrentTimeInMs < 0 ? 0 : mCurrentTimeInMs); lcdTimer->display(t.toString("m:ss")); - //lcdTimer->display(t.toString("m:ss")); QGraphicsRectItem::update(); } @@ -1247,7 +1243,7 @@ void DelegateMediaControl::mousePressEvent(QGraphicsSceneMouseEvent *event) void DelegateMediaControl::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - qreal frameWidth = rect().height() / 2; + qreal frameWidth = mSeecArea.height() / 2; if (boundingRect().contains(event->pos() - QPointF(frameWidth,0)) && boundingRect().contains(event->pos() + QPointF(frameWidth,0))) { @@ -1265,7 +1261,6 @@ void DelegateMediaControl::seekToMousePos(QPointF mousePos) minX = frameWidth; length = mSeecArea.width() - lcdTimer->rect().width(); - length = mSeecArea.width() /*- lcdTimer->rect().width()*/; qreal mouseX = mousePos.x(); if (mouseX >= (mSeecArea.width() - mSeecArea.height()/2)) diff --git a/src/domain/UBGraphicsItemDelegate.h b/src/domain/UBGraphicsItemDelegate.h index f135f66b..88c598c7 100644 --- a/src/domain/UBGraphicsItemDelegate.h +++ b/src/domain/UBGraphicsItemDelegate.h @@ -149,6 +149,7 @@ class DelegateMediaControl: public QObject, public QGraphicsRectItem private: int mStartWidth; + int mSeecAreaBorderHeight; QRectF mSeecArea; QRectF mLCDTimerArea; @@ -284,7 +285,7 @@ class UBGraphicsItemDelegate : public QObject qreal mAntiScaleRatio; QList mButtons; - + QList mToolBarButtons; UBGraphicsToolBarItem* mToolBarItem; protected slots: diff --git a/src/domain/UBGraphicsMediaItem.cpp b/src/domain/UBGraphicsMediaItem.cpp index e14aac6f..f077bdf6 100644 --- a/src/domain/UBGraphicsMediaItem.cpp +++ b/src/domain/UBGraphicsMediaItem.cpp @@ -35,11 +35,20 @@ UBAudioPresentationWidget::UBAudioPresentationWidget(QWidget *parent) void UBAudioPresentationWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); - painter.fillRect(rect(), QBrush(Qt::black)); + painter.fillRect(rect(), QBrush(Qt::white)); + painter.drawRoundedRect(1,1, width()-2, height()-2, height()/5, height()/5); + + QImage mask_img(size(), QImage::Format_Mono); + mask_img.fill(0xff); + QPainter mask_painter(&mask_img); + mask_painter.setBrush(QBrush( QColor(0, 0, 0))); + mask_painter.drawRoundedRect(1,1, width()-3, height()-3, height()/5, height()/5); + + setMask(QBitmap::fromImage(mask_img)); if (QString() != mTitle) { - painter.setPen(QPen(Qt::white)); + painter.setPen(QPen(Qt::black)); QRect titleRect = rect(); titleRect.setX(mBorderSize); titleRect.setY(2); @@ -54,13 +63,13 @@ bool UBGraphicsMediaItem::sIsMutedByDefault = false; UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsItem *parent) : UBGraphicsProxyWidget(parent) + , mVideoWidget(NULL) + , mAudioWidget(NULL) , mMuted(sIsMutedByDefault) , mMutedByUserAction(sIsMutedByDefault) , mMediaFileUrl(pMediaFileUrl) - , mInitialPos(0) - , mVideoWidget(NULL) - , mAudioWidget(NULL) , mLinkedImage(NULL) + , mInitialPos(0) { update(); diff --git a/src/domain/UBGraphicsMediaItem.h b/src/domain/UBGraphicsMediaItem.h index e646129d..1ab0870d 100644 --- a/src/domain/UBGraphicsMediaItem.h +++ b/src/domain/UBGraphicsMediaItem.h @@ -139,8 +139,6 @@ private: QUrl mMediaFileUrl; QString mMediaSource; - qint64 mInitialPos; - mediaType mMediaType; bool mShouldMove; @@ -149,5 +147,7 @@ private: bool haveLinkedImage; QGraphicsPixmapItem *mLinkedImage; + + qint64 mInitialPos; }; #endif // UBGRAPHICSMEDIAITEM_H diff --git a/src/domain/UBGraphicsMediaItemDelegate.cpp b/src/domain/UBGraphicsMediaItemDelegate.cpp index 8411be34..d34632ca 100644 --- a/src/domain/UBGraphicsMediaItemDelegate.cpp +++ b/src/domain/UBGraphicsMediaItemDelegate.cpp @@ -94,7 +94,7 @@ void UBGraphicsMediaItemDelegate::buildButtons() connect(mMuteButton, SIGNAL(clicked(bool)), delegated(), SLOT(toggleMute())); connect(mMuteButton, SIGNAL(clicked(bool)), this, SLOT(toggleMute())); // for changing button image - mButtons << mPlayPauseButton << mStopButton << mMuteButton; + mToolBarButtons << mPlayPauseButton << mStopButton << mMuteButton; mToolBarItem->setItemsOnToolBar(QList() << mPlayPauseButton << mStopButton << mMediaControl << mMuteButton); mToolBarItem->setVisibleOnBoard(true); @@ -135,7 +135,6 @@ void UBGraphicsMediaItemDelegate::positionHandles() if (mediaItem->getMediaType() == UBGraphicsMediaItem::mediaType_Video) { mToolBarItem->setPos(0, delegated()->boundingRect().height()-mToolBarItem->rect().height()); - // mToolBarItem->setScale(AntiScaleRatio); toolBarRect.setWidth(delegated()->boundingRect().width()); } @@ -156,13 +155,10 @@ void UBGraphicsMediaItemDelegate::positionHandles() int toolBarMinimumWidth = 0; int mediaItemWidth = mToolBarItem->boundingRect().width(); - foreach (DelegateButton* button, mButtons) + foreach (DelegateButton* button, mToolBarButtons) { - if (button->getSection() == Qt::TitleBarArea) - { - mediaItemWidth -= button->boundingRect().width() + mToolBarItem->getElementsPadding(); - toolBarMinimumWidth += button->boundingRect().width() + mToolBarItem->getElementsPadding(); - } + mediaItemWidth -= button->boundingRect().width() + mToolBarItem->getElementsPadding(); + toolBarMinimumWidth += button->boundingRect().width() + mToolBarItem->getElementsPadding(); } toolBarMinimumWidth += mToolBarItem->boundingRect().height(); @@ -194,10 +190,6 @@ void UBGraphicsMediaItemDelegate::remove(bool canUndo) if (delegated() && delegated()->mediaObject()) delegated()->mediaObject()->stop(); - QGraphicsScene* scene = mDelegated->scene(); - - scene->removeItem(mMediaControl); - UBGraphicsItemDelegate::remove(canUndo); } diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 9ee4fb67..08ecb49e 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -541,12 +541,14 @@ bool UBGraphicsScene::inputDeviceRelease() mAddedItems.remove(mArcPolygonItem); removeItem(mArcPolygonItem); UBCoreGraphicsScene::removeItemFromDeletion(mArcPolygonItem); + mArcPolygonItem->setStrokesGroup(pStrokes); pStrokes->addToGroup(mArcPolygonItem); // Add the center cross foreach(QGraphicsItem* item, mAddedItems){ removeItem(item); UBCoreGraphicsScene::removeItemFromDeletion(item); + mArcPolygonItem->setStrokesGroup(pStrokes); pStrokes->addToGroup(item); } @@ -1979,7 +1981,16 @@ void UBGraphicsScene::addMagnifier(UBMagnifierParams params) setModified(true); } -void UBGraphicsScene::moveMagnifier(QPoint newPos) +void UBGraphicsScene::moveMagnifier() +{ + if (magniferControlViewWidget) + { + QPoint magnifierPos = QPoint(magniferControlViewWidget->pos().x() + magniferControlViewWidget->size().width() / 2, magniferControlViewWidget->pos().y() + magniferControlViewWidget->size().height() / 2 ); + moveMagnifier(magnifierPos, true); + } +} + +void UBGraphicsScene::moveMagnifier(QPoint newPos, bool forceGrab) { QWidget *cContainer = (QWidget*)(UBApplication::boardController->controlContainer()); QGraphicsView *cView = (QGraphicsView*)UBApplication::boardController->controlView(); @@ -1987,6 +1998,8 @@ void UBGraphicsScene::moveMagnifier(QPoint newPos) QPoint dvZeroPoint = dView->mapToGlobal(QPoint(0,0)); + QRect qcr = cView->geometry(); + QRect qdr = dView->geometry(); int cvW = cView->width(); int dvW = dView->width(); qreal wCoeff = (qreal)dvW / (qreal)cvW; @@ -1999,8 +2012,8 @@ void UBGraphicsScene::moveMagnifier(QPoint newPos) QPoint cvPoint = cView->mapFromGlobal(globalPoint); QPoint dvPoint( cvPoint.x() * wCoeff + dvZeroPoint.x(), cvPoint.y() * hCoeff + dvZeroPoint.y()); - magniferControlViewWidget->grabNMove(globalPoint, globalPoint, false, false); - magniferDisplayViewWidget->grabNMove(globalPoint, dvPoint, false, true); + magniferControlViewWidget->grabNMove(globalPoint, globalPoint, forceGrab, false); + magniferDisplayViewWidget->grabNMove(globalPoint, dvPoint, forceGrab, true); setModified(true); } diff --git a/src/domain/UBGraphicsScene.h b/src/domain/UBGraphicsScene.h index a9a82f11..027ef706 100644 --- a/src/domain/UBGraphicsScene.h +++ b/src/domain/UBGraphicsScene.h @@ -326,7 +326,8 @@ public slots: void selectionChangedProcessing(); void updateGroupButtonState(); - void moveMagnifier(QPoint newPos); + void moveMagnifier(); + void moveMagnifier(QPoint newPos, bool forceGrab = false); void closeMagnifier(); void zoomInMagnifier(); void zoomOutMagnifier(); diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp index bff2dd5e..92cd1bf4 100644 --- a/src/domain/UBGraphicsStrokesGroup.cpp +++ b/src/domain/UBGraphicsStrokesGroup.cpp @@ -1,5 +1,7 @@ #include "UBGraphicsStrokesGroup.h" +#include "domain/UBGraphicsPolygonItem.h" + #include "core/memcheck.h" UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent):QGraphicsItemGroup(parent) @@ -63,6 +65,15 @@ UBItem* UBGraphicsStrokesGroup::deepCopy() const { UBGraphicsStrokesGroup* copy = new UBGraphicsStrokesGroup(); + + QList chl = childItems(); + + foreach(QGraphicsItem *child, chl) + { + UBGraphicsPolygonItem *polygon = dynamic_cast(child); + if (polygon) + copy->addToGroup(dynamic_cast(polygon->deepCopy())); + } copyItemParameters(copy); return copy; diff --git a/src/domain/UBGraphicsWidgetItem.cpp b/src/domain/UBGraphicsWidgetItem.cpp index 7c94b758..662cc947 100644 --- a/src/domain/UBGraphicsWidgetItem.cpp +++ b/src/domain/UBGraphicsWidgetItem.cpp @@ -106,11 +106,17 @@ void UBGraphicsWidgetItem::initialize() QPalette palette = page()->palette(); palette.setBrush(QPalette::Base, QBrush(Qt::transparent)); - page()->setPalette(palette); + page()->setPalette(palette); + page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); connect(page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared())); connect(page(), SIGNAL(geometryChangeRequested(const QRect&)), this, SLOT(geometryChangeRequested(const QRect&))); connect(this, SIGNAL(loadFinished(bool)), this, SLOT(mainFrameLoadFinished (bool))); + connect(page(), SIGNAL(linkClicked(const QUrl&)), this, SLOT(onLinkClicked(const QUrl&))); +} + +void UBGraphicsWidgetItem::onLinkClicked(const QUrl& url){ + UBApplication::webController->loadUrl(url); } QUrl UBGraphicsWidgetItem::mainHtml() diff --git a/src/domain/UBGraphicsWidgetItem.h b/src/domain/UBGraphicsWidgetItem.h index 6125ab88..08399603 100644 --- a/src/domain/UBGraphicsWidgetItem.h +++ b/src/domain/UBGraphicsWidgetItem.h @@ -152,6 +152,9 @@ class UBGraphicsWidgetItem : public UBGraphicsWebView virtual void javaScriptWindowObjectCleared(); void mainFrameLoadFinished(bool ok); + private slots: + void onLinkClicked(const QUrl& url); + private: bool mIsFrozen; bool mIsTakingSnapshot; diff --git a/src/domain/domain.pri b/src/domain/domain.pri index fb6cd717..d66c72ec 100644 --- a/src/domain/domain.pri +++ b/src/domain/domain.pri @@ -18,7 +18,6 @@ HEADERS += src/domain/UBGraphicsScene.h \ src/domain/UBGraphicsStroke.h \ src/domain/UBGraphicsMediaItem.h \ src/domain/UBAbstractUndoCommand.h\ - src/domain/UBAngleWidget.h \ src/domain/UBGraphicsGroupContainerItem.h \ src/domain/UBGraphicsGroupContainerItemDelegate.h \ src/domain/UBGraphicsStrokesGroup.h @@ -50,7 +49,6 @@ SOURCES += src/domain/UBGraphicsScene.cpp \ src/domain/UBGraphicsStroke.cpp \ src/domain/UBGraphicsMediaItem.cpp \ src/domain/UBAbstractUndoCommand.cpp \ - src/domain/UBAngleWidget.cpp \ src/domain/ubgraphicsgroupcontaineritem.cpp \ src/domain/ubgraphicsgroupcontaineritemdelegate.cpp \ src/domain/UBGraphicsStrokesGroup.cpp diff --git a/src/gui/UBDockPalette.cpp b/src/gui/UBDockPalette.cpp index 9a159281..a302d847 100644 --- a/src/gui/UBDockPalette.cpp +++ b/src/gui/UBDockPalette.cpp @@ -96,10 +96,6 @@ UBDockPalette::~UBDockPalette() delete mpLayout; mpLayout = NULL; } - if (NULL != mTabPalette) { - delete mTabPalette; - mTabPalette = NULL; - } } /** @@ -533,6 +529,7 @@ void UBDockPalette::setVisible(bool visible) bool UBDockPalette::switchMode(eUBDockPaletteWidgetMode mode) { + mLastOpenedTabForMode.insert(mCurrentMode, mpStackWidget->currentIndex()); mCurrentMode = mode; bool hasVisibleElements = false; //-------------------------------// @@ -556,7 +553,7 @@ bool UBDockPalette::switchMode(eUBDockPaletteWidgetMode mode) //-------------------------------// if(mRegisteredWidgets.size() > 0) - showTabWidget(0); + showTabWidget(mLastOpenedTabForMode.value(mCurrentMode)); update(); diff --git a/src/gui/UBDockPalette.h b/src/gui/UBDockPalette.h index 02610a20..f1c6f323 100644 --- a/src/gui/UBDockPalette.h +++ b/src/gui/UBDockPalette.h @@ -176,6 +176,8 @@ protected: QVector mRegisteredWidgets; /** The current tab widget */ QString mCrntTabWidget; + /** Last opened tab index depending on mode */ + QMap mLastOpenedTabForMode; private slots: void onToolbarPosUpdated(); diff --git a/src/gui/UBFeaturesWidget.cpp b/src/gui/UBFeaturesWidget.cpp index 7476c8bc..d221950b 100644 --- a/src/gui/UBFeaturesWidget.cpp +++ b/src/gui/UBFeaturesWidget.cpp @@ -81,7 +81,9 @@ UBFeaturesWidget::UBFeaturesWidget(QWidget *parent, const char *name) connect(controller, SIGNAL(scanStarted()), mActionBar, SLOT(lockIt())); connect(controller, SIGNAL(scanFinished()), mActionBar, SLOT(unlockIt())); connect(controller, SIGNAL(maxFilesCountEvaluated(int)), centralWidget, SIGNAL(maxFilesCountEvaluated(int))); - connect(controller, SIGNAL(featureAddedFromThread()), centralWidget, SLOT(increaseStatusBarValue())); + connect(controller, SIGNAL(featureAddedFromThread()), centralWidget, SIGNAL(increaseStatusBarValue())); + connect(controller, SIGNAL(scanCategory(QString)), centralWidget, SIGNAL(scanCategory(QString))); + connect(controller, SIGNAL(scanPath(QString)), centralWidget, SIGNAL(scanPath(QString))); } UBFeaturesWidget::~UBFeaturesWidget() @@ -497,15 +499,14 @@ UBFeaturesCentralWidget::UBFeaturesCentralWidget(QWidget *parent) : QWidget(pare connect(this, SIGNAL(sendFileNameList(QStringList)), dlg, SLOT(setFileNameList(QStringList))); //Progress bar to show scanning progress - QProgressBar *progressBar = new QProgressBar(); + UBFeaturesProgressInfo *progressBar = new UBFeaturesProgressInfo(); mAdditionalDataContainer->addWidget(progressBar); mAdditionalDataContainer->setCurrentIndex(ProgressBarWidget); - progressBar->setMinimum(0); - progressBar->setValue(0); - progressBar->setMaximum(10000); - - connect(this, SIGNAL(maxFilesCountEvaluated(int)), progressBar, SLOT(setMaximum(int))); + connect(this, SIGNAL(maxFilesCountEvaluated(int)), progressBar, SLOT(setProgressMax(int))); + connect(this, SIGNAL(increaseStatusBarValue()), progressBar, SLOT(increaseProgressValue())); + connect(this, SIGNAL(scanCategory(QString)), progressBar, SLOT(setCommmonInfoText(QString))); + connect(this, SIGNAL(scanPath(QString)), progressBar, SLOT(setDetailedInfoText(QString))); mLayout->addWidget(mStackedWidget, 1); mLayout->addWidget(mAdditionalDataContainer, 0); @@ -546,6 +547,11 @@ UBFeature UBFeaturesCentralWidget::getCurElementFromProperties() void UBFeaturesCentralWidget::showAdditionalData(AddWidget pWidgetType, AddWidgetState pState) { + if (!mAdditionalDataContainer->widget(pWidgetType)) { + qDebug() << "can't find widget specified by UBFeaturesCentralWidget::showAdditionalData(AddWidget pWidgetType, AddWidgetState pState)"; + return; + } + mAdditionalDataContainer->setMaximumHeight(mAdditionalDataContainer->widget(pWidgetType)->sizeHint().height()); mAdditionalDataContainer->setCurrentIndex(pWidgetType); @@ -573,46 +579,21 @@ void UBFeaturesCentralWidget::hideAdditionalData() void UBFeaturesCentralWidget::scanStarted() { - if (!mAdditionalDataContainer->widget(ProgressBarWidget)) { - return; - } - QProgressBar *progressBar = qobject_cast(mAdditionalDataContainer->widget(ProgressBarWidget)); - if (progressBar && !progressBar->isVisible()) { - showAdditionalData((AddWidget)1); - } + showAdditionalData(ProgressBarWidget); } void UBFeaturesCentralWidget::scanFinished() { - if (!mAdditionalDataContainer->widget(ProgressBarWidget)) { - return; - } - QProgressBar *progressBar = qobject_cast(mAdditionalDataContainer->widget(ProgressBarWidget)); - if (progressBar && progressBar->isVisible()) { - hideAdditionalData(); - qDebug() << "progressBar max value is " << progressBar->maximum(); - } -} - -void UBFeaturesCentralWidget::increaseStatusBarValue() -{ - if (!mAdditionalDataContainer->widget(ProgressBarWidget)) { - return; - } - QProgressBar *progressBar = qobject_cast(mAdditionalDataContainer->widget(ProgressBarWidget)); - if (progressBar) { - progressBar->setValue(progressBar->value() + 1); - } + hideAdditionalData(); } UBFeaturesNewFolderDialog::UBFeaturesNewFolderDialog(QWidget *parent) : QWidget(parent) { this->setStyleSheet("background:white;"); - QVBoxLayout *mainLayout = new QVBoxLayout(); - setLayout(mainLayout); + QVBoxLayout *mainLayout = new QVBoxLayout(this); - QVBoxLayout *labelLayout = new QVBoxLayout(this); + QVBoxLayout *labelLayout = new QVBoxLayout(); QLabel *mLabel = new QLabel(labelText, this); mLineEdit = new QLineEdit(this); @@ -622,7 +603,7 @@ UBFeaturesNewFolderDialog::UBFeaturesNewFolderDialog(QWidget *parent) : QWidget( labelLayout->addWidget(mLabel); labelLayout->addWidget(mLineEdit); - QHBoxLayout *buttonLayout = new QHBoxLayout(this); + QHBoxLayout *buttonLayout = new QHBoxLayout(); acceptButton = new QPushButton(acceptText, this); QPushButton *cancelButton = new QPushButton(cancelText, this); @@ -676,6 +657,64 @@ void UBFeaturesNewFolderDialog::reactOnTextChanged(const QString &pStr) } } +UBFeaturesProgressInfo::UBFeaturesProgressInfo(QWidget *parent) : + QWidget(parent), + mProgressBar(0), + mCommonInfoLabel(0), + mDetailedInfoLabel(0) +{ + QVBoxLayout *mainLayer = new QVBoxLayout(this); + + mProgressBar = new QProgressBar(this); +// setting defaults + mProgressBar->setMinimum(0); + mProgressBar->setMaximum(100000); + mProgressBar->setValue(0); + + mProgressBar->setStyleSheet("background:white"); + + mCommonInfoLabel = new QLabel(this); + mDetailedInfoLabel = new QLabel(this); + mDetailedInfoLabel->setAlignment(Qt::AlignRight); + mCommonInfoLabel->hide(); + mDetailedInfoLabel->hide(); + + mainLayer->addWidget(mCommonInfoLabel); + mainLayer->addWidget(mDetailedInfoLabel); + mainLayer->addWidget(mProgressBar); +} + +void UBFeaturesProgressInfo::setCommmonInfoText(const QString &str) +{ + mProgressBar->setFormat(str + tr(" load") + "(%p%)"); +} + +void UBFeaturesProgressInfo::setDetailedInfoText(const QString &str) +{ + mDetailedInfoLabel->setText(str); +} + +void UBFeaturesProgressInfo::setProgressMax(int pValue) +{ + mProgressBar->setMaximum(pValue); +} + +void UBFeaturesProgressInfo::setProgressMin(int pValue) +{ + mProgressBar->setMinimum(pValue); +} + +void UBFeaturesProgressInfo::increaseProgressValue() +{ + mProgressBar->setValue(mProgressBar->value() + 1); +} + +void UBFeaturesProgressInfo::sendFeature(UBFeature pFeature) +{ + Q_UNUSED(pFeature); +} + + UBFeaturesWebView::UBFeaturesWebView(QWidget* parent, const char* name):QWidget(parent) , mpView(NULL) , mpWebSettings(NULL) @@ -1294,9 +1333,12 @@ Qt::ItemFlags UBFeaturesModel::flags( const QModelIndex &index ) const { UBFeature item = index.data( Qt::UserRole + 1 ).value(); if ( item.getType() == FEATURE_INTERACTIVE - || item.getType() == FEATURE_ITEM - || item.getType() == FEATURE_INTERNAL - || item.getType() == FEATURE_FOLDER) + || item.getType() == FEATURE_ITEM + || item.getType() == FEATURE_AUDIO + || item.getType() == FEATURE_VIDEO + || item.getType() == FEATURE_IMAGE + || item.getType() == FEATURE_INTERNAL + || item.getType() == FEATURE_FOLDER) resultFlags |= Qt::ItemIsDragEnabled; @@ -1337,12 +1379,15 @@ bool UBFeaturesSearchProxyModel::filterAcceptsRow( int sourceRow, const QModelIn /*QString name = sourceModel()->data(index, Qt::DisplayRole).toString(); eUBLibElementType type = (eUBLibElementType)sourceModel()->data(index, Qt::UserRole + 1).toInt();*/ - UBFeature feature = sourceModel()->data(index, Qt::UserRole + 1).value(); + UBFeature feature = sourceModel()->data(index, Qt::UserRole + 1).value(); bool isFile = feature.getType() == FEATURE_INTERACTIVE - || feature.getType() == FEATURE_INTERNAL - || feature.getType() == FEATURE_ITEM; + || feature.getType() == FEATURE_INTERNAL + || feature.getType() == FEATURE_ITEM + || feature.getType() == FEATURE_AUDIO + || feature.getType() == FEATURE_VIDEO + || feature.getType() == FEATURE_IMAGE; - return isFile && filterRegExp().exactMatch( feature.getName() ); + return isFile && filterRegExp().exactMatch( feature.getName() ); } bool UBFeaturesPathProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex & sourceParent )const diff --git a/src/gui/UBFeaturesWidget.h b/src/gui/UBFeaturesWidget.h index 788de51b..583d7268 100644 --- a/src/gui/UBFeaturesWidget.h +++ b/src/gui/UBFeaturesWidget.h @@ -45,6 +45,7 @@ class UBFeaturesNavigatorWidget; class UBFeaturesMimeData; class UBFeaturesCentralWidget; class UBFeaturesNewFolderDialog; +class UBFeaturesProgressBar; class UBFeaturesWidget : public UBDockPaletteWidget { @@ -189,7 +190,6 @@ public: void setPropertiesThumbnail(const QPixmap &pix); StackElement currentView() const {return static_cast(mStackedWidget->currentIndex());} UBFeature getCurElementFromProperties(); - void showAdditionalData(AddWidget pWidgetType, AddWidgetState pState = NonModal); void setLockedExcludingAdditional(bool pLock); @@ -207,6 +207,12 @@ signals: // progressbar widget related signals void maxFilesCountEvaluated(int pValue); + void increaseStatusBarValue(); + void scanCategory(const QString &); + void scanPath(const QString &); + +public slots: + void showAdditionalData(AddWidget pWidgetType, AddWidgetState pState = NonModal); private slots: void createNewFolderSlot(QString pStr); @@ -214,7 +220,6 @@ private slots: void scanStarted(); void scanFinished(); - void increaseStatusBarValue(); private: @@ -252,6 +257,27 @@ private: }; +class UBFeaturesProgressInfo: public QWidget { + Q_OBJECT + +public: + UBFeaturesProgressInfo(QWidget *parent = 0); + +private slots: + void setCommmonInfoText(const QString &str); + void setDetailedInfoText(const QString &str); + void setProgressMin(int pValue); + void setProgressMax(int pValue); + void increaseProgressValue(); + void sendFeature(UBFeature pFeature); + + +private: + QProgressBar *mProgressBar; + QLabel *mCommonInfoLabel; + QLabel *mDetailedInfoLabel; +}; + class UBFeaturesWebView : public QWidget { Q_OBJECT diff --git a/src/gui/UBRubberBand.cpp b/src/gui/UBRubberBand.cpp index a2919c60..1ca224f3 100644 --- a/src/gui/UBRubberBand.cpp +++ b/src/gui/UBRubberBand.cpp @@ -33,8 +33,8 @@ UBRubberBand::UBRubberBand(Shape s, QWidget * p) : QRubberBand(s, p) , mResizingMode(None) , mMouseIsPressed(false) - , mLastPressedPoint(QPoint()) , mResizingBorderHeight(20) + , mLastPressedPoint(QPoint()) { customStyle = NULL; diff --git a/src/gui/UBTeacherGuideWidget.cpp b/src/gui/UBTeacherGuideWidget.cpp index cc0a3324..cb2b912d 100644 --- a/src/gui/UBTeacherGuideWidget.cpp +++ b/src/gui/UBTeacherGuideWidget.cpp @@ -126,6 +126,11 @@ UBTeacherGuideEditionWidget::UBTeacherGuideEditionWidget(QWidget *parent, const connect(mpTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(onAddItemClicked(QTreeWidgetItem*,int))); connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(onActiveSceneChanged())); +#ifdef Q_WS_MAC + // on mac and with the custom qt the widget on the tree are not automatically relocated when using the vertical scrollbar. To relocate them we link the valueChange signal of the vertical scrollbar witht a local signal to trig a change and a repaint of the tree widget + connect(mpTreeWidget->verticalScrollBar(),SIGNAL(valueChanged(int)),this,SLOT(onSliderMoved(int))); +#endif + mpAddAnActionItem = new UBAddItem(tr("Add an action"), eUBTGAddSubItemWidgetType_Action, mpTreeWidget); mpAddAMediaItem = new UBAddItem(tr("Add a media"), eUBTGAddSubItemWidgetType_Media, mpTreeWidget); mpAddALinkItem = new UBAddItem(tr("Add a link"), eUBTGAddSubItemWidgetType_Url, mpTreeWidget); @@ -154,6 +159,13 @@ UBTeacherGuideEditionWidget::~UBTeacherGuideEditionWidget() DELETEPTR(mpLayout); } +#ifdef Q_WS_MAC +void UBTeacherGuideEditionWidget::onSliderMoved(int size) +{ + Q_UNUSED(size); + mpAddAMediaItem->setExpanded(true); +} +#endif void UBTeacherGuideEditionWidget::showEvent(QShowEvent* event) { setFocus(); @@ -322,7 +334,7 @@ void UBTeacherGuideEditionWidget::onAddItemClicked(QTreeWidgetItem* widget, int UBTGMediaWidget* mediaWidget = new UBTGMediaWidget(widget); if (element) mediaWidget->initializeWithDom(*element); - mpTreeWidget->setItemWidget(newWidgetItem, 0, mediaWidget); + mpTreeWidget->setItemWidget(newWidgetItem,0, mediaWidget); break; } case eUBTGAddSubItemWidgetType_Url: { diff --git a/src/gui/UBTeacherGuideWidget.h b/src/gui/UBTeacherGuideWidget.h index b723e976..775728e5 100644 --- a/src/gui/UBTeacherGuideWidget.h +++ b/src/gui/UBTeacherGuideWidget.h @@ -75,7 +75,9 @@ private: private slots: void onActiveDocumentChanged(); - +#ifdef Q_WS_MACX + void onSliderMoved(int size); +#endif }; diff --git a/src/gui/UBToolWidget.cpp b/src/gui/UBToolWidget.cpp index 730a3c39..44587da9 100644 --- a/src/gui/UBToolWidget.cpp +++ b/src/gui/UBToolWidget.cpp @@ -14,38 +14,33 @@ */ #include - #include "UBToolWidget.h" - -#include "frameworks/UBPlatformUtils.h" -#include "frameworks/UBFileSystemUtils.h" - -#include "core/UBApplication.h" -#include "core/UBSettings.h" - -#include "domain/UBGraphicsScene.h" -#include "domain/UBGraphicsWidgetItem.h" - #include "api/UBWidgetUniboardAPI.h" #include "api/UBW3CWidgetAPI.h" - #include "board/UBBoardController.h" #include "board/UBBoardView.h" - +#include "core/UBApplication.h" +#include "core/UBSettings.h" +#include "domain/UBGraphicsScene.h" +#include "domain/UBGraphicsWidgetItem.h" +#include "frameworks/UBPlatformUtils.h" +#include "frameworks/UBFileSystemUtils.h" #include "core/memcheck.h" + QPixmap* UBToolWidget::sClosePixmap = 0; QPixmap* UBToolWidget::sUnpinPixmap = 0; UBToolWidget::UBToolWidget(const QUrl& pUrl, QGraphicsItem *pParent) : QGraphicsWidget(pParent, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint) - , mGraphicsWidgetItem(0) - , mGraphicsWebView(0) , mShouldMoveWidget(false) + , mContentMargin(0) + , mFrameWidth(0) + , mGraphicsWebView(0) + , mGraphicsWidgetItem(0) { int widgetType = UBGraphicsWidgetItem::widgetType(pUrl); - if (widgetType == UBWidgetType::Apple) mGraphicsWidgetItem = new UBGraphicsAppleWidgetItem(pUrl, this); else if (widgetType == UBWidgetType::W3C) @@ -56,25 +51,23 @@ UBToolWidget::UBToolWidget(const QUrl& pUrl, QGraphicsItem *pParent) initialize(); } - UBToolWidget::UBToolWidget(UBGraphicsWidgetItem *pWidget, QGraphicsItem *pParent) : QGraphicsWidget(pParent, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint) , mShouldMoveWidget(false) + , mContentMargin(0) + , mFrameWidth(0) + , mGraphicsWebView(0) + , mGraphicsWidgetItem(pWidget) { - mGraphicsWidgetItem = pWidget; - initialize(); - javaScriptWindowObjectCleared(); } - UBToolWidget::~UBToolWidget() { // NOOP } - void UBToolWidget::initialize() { if (!sClosePixmap) @@ -108,131 +101,85 @@ void UBToolWidget::initialize() connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), this, SLOT(javaScriptWindowObjectCleared())); } - -void UBToolWidget::javaScriptWindowObjectCleared() -{ - UBWidgetUniboardAPI *uniboardAPI = new UBWidgetUniboardAPI(UBApplication::boardController->activeScene(), mGraphicsWidgetItem); - - mGraphicsWebView->page()->mainFrame()->addToJavaScriptWindowObject("sankore", uniboardAPI); - - UBGraphicsW3CWidgetItem *graphicsW3cWidgetItem = dynamic_cast(mGraphicsWidgetItem); - if (graphicsW3cWidgetItem) - { - UBW3CWidgetAPI* widgetAPI = new UBW3CWidgetAPI(graphicsW3cWidgetItem); - mGraphicsWebView->page()->mainFrame()->addToJavaScriptWindowObject("widget", widgetAPI); - } -} - -void UBToolWidget::setPos(const QPointF &point) -{ - UBToolWidget::setPos(point.x(), point.y()); -} - -void UBToolWidget::setPos(qreal x, qreal y) -{ - QGraphicsItem::setPos(x - mContentMargin * scale(), y - mContentMargin * scale()); -} - -QPointF UBToolWidget::pos() const +bool UBToolWidget::event(QEvent *event) { - return QPointF(QGraphicsItem::pos().x() + mContentMargin * scale(), QGraphicsItem::pos().y() + mContentMargin * scale()); -} - -void UBToolWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) -{ - QGraphicsWidget::paint(painter, option, widget); - - if (isActiveWindow()) - { - painter->setRenderHint(QPainter::Antialiasing); - painter->setPen(Qt::NoPen); - painter->setBrush(QColor(127, 127, 127, 127)); - - painter->drawRoundedRect(QRectF(sClosePixmap->width() / 2, sClosePixmap->height() / 2, preferredWidth() - sClosePixmap->width(), mFrameWidth), mFrameWidth / 2, mFrameWidth / 2); - - painter->drawPixmap(0, 0, *sClosePixmap); - - if (mGraphicsWidgetItem->canBeContent()) - painter->drawPixmap(mContentMargin, 0, *sUnpinPixmap); - } + if (event->type() == QEvent::ShortcutOverride) + event->accept(); + return QGraphicsWidget::event(event); } - void UBToolWidget::mousePressEvent(QGraphicsSceneMouseEvent *event) { QGraphicsWidget::mousePressEvent(event); - // did webkit consume the mouse press ? + /* did webkit consume the mouse press ? */ mShouldMoveWidget = !event->isAccepted() && (event->buttons() & Qt::LeftButton); - mMousePressPos = event->pos(); - event->accept(); - update(); } - void UBToolWidget::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if(mShouldMoveWidget && (event->buttons() & Qt::LeftButton)) - { + if(mShouldMoveWidget && (event->buttons() & Qt::LeftButton)) { setPos(pos() - mMousePressPos + event->pos()); event->accept(); } - QGraphicsWidget::mouseMoveEvent(event); - } - void UBToolWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { mShouldMoveWidget = false; - if (event->pos().x() >= 0 && event->pos().x() < sClosePixmap->width() - && event->pos().y() >= 0 && event->pos().y() < sClosePixmap->height()) - { + if (event->pos().x() >= 0 && event->pos().x() < sClosePixmap->width() && event->pos().y() >= 0 && event->pos().y() < sClosePixmap->height()) { remove(); event->accept(); } - else if (mGraphicsWidgetItem->canBeContent() && event->pos().x() >= mContentMargin && event->pos().x() < mContentMargin + sUnpinPixmap->width() - && event->pos().y() >= 0 && event->pos().y() < sUnpinPixmap->height()) - { + else if (mGraphicsWidgetItem->canBeContent() && event->pos().x() >= mContentMargin && event->pos().x() < mContentMargin + sUnpinPixmap->width() && event->pos().y() >= 0 && event->pos().y() < sUnpinPixmap->height()) { UBApplication::boardController->moveToolWidgetToScene(this); event->accept(); } else - QGraphicsWidget::mouseReleaseEvent(event); // don't propgate to parent, the widget is deleted in UBApplication::boardController->removeTool + QGraphicsWidget::mouseReleaseEvent(event); /* don't propgate to parent, the widget is deleted in UBApplication */ } - -bool UBToolWidget::eventFilter(QObject *obj, QEvent *event) +void UBToolWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { - if (mShouldMoveWidget && obj == mGraphicsWidgetItem && event->type() == QEvent::MouseMove) - { - QMouseEvent *mouseMoveEvent = static_cast(event); + QGraphicsWidget::paint(painter, option, widget); - if (mouseMoveEvent->buttons() & Qt::LeftButton) - { - setPos(pos() - mMousePressPos + mGraphicsWidgetItem->mapToItem(this, mouseMoveEvent->pos())); + /* painting lightweight toolbar */ + if (isActiveWindow()) { + painter->setRenderHint(QPainter::Antialiasing); + painter->setPen(Qt::NoPen); + painter->setBrush(QColor(127, 127, 127, 127)); - event->accept(); - return true; - } + painter->drawRoundedRect(QRectF(sClosePixmap->width() / 2, sClosePixmap->height() / 2, preferredWidth() - sClosePixmap->width(), mFrameWidth), mFrameWidth / 2, mFrameWidth / 2); + painter->drawPixmap(0, 0, *sClosePixmap); + if (mGraphicsWidgetItem->canBeContent()) + painter->drawPixmap(mContentMargin, 0, *sUnpinPixmap); } - - // standard event processing - return QObject::eventFilter(obj, event); } - -void UBToolWidget::centerOn(const QPointF& pos) +void UBToolWidget::javaScriptWindowObjectCleared() { - QGraphicsWidget::setPos(pos - QPointF(preferredWidth() / 2, preferredHeight() / 2)); + UBWidgetUniboardAPI *uniboardAPI = new UBWidgetUniboardAPI(UBApplication::boardController->activeScene(), mGraphicsWidgetItem); + + mGraphicsWebView->page()->mainFrame()->addToJavaScriptWindowObject("sankore", uniboardAPI); + + UBGraphicsW3CWidgetItem *graphicsW3cWidgetItem = dynamic_cast(mGraphicsWidgetItem); + if (graphicsW3cWidgetItem) + { + UBW3CWidgetAPI* widgetAPI = new UBW3CWidgetAPI(graphicsW3cWidgetItem); + mGraphicsWebView->page()->mainFrame()->addToJavaScriptWindowObject("widget", widgetAPI); + } } +UBGraphicsWidgetItem* UBToolWidget::graphicsWidgetItem() const +{ + return mGraphicsWidgetItem; +} QPointF UBToolWidget::naturalCenter() const { @@ -242,10 +189,15 @@ QPointF UBToolWidget::naturalCenter() const return QPointF(0, 0); } +void UBToolWidget::centerOn(const QPointF& pos) +{ + QGraphicsWidget::setPos(pos - QPointF(preferredWidth() / 2, preferredHeight() / 2)); +} -UBGraphicsWidgetItem* UBToolWidget::graphicsWidgetItem() const +void UBToolWidget::remove() { - return mGraphicsWidgetItem; + mGraphicsWebView->setHtml(QString()); + scene()->removeItem(this); } UBGraphicsScene* UBToolWidget::scene() @@ -253,8 +205,22 @@ UBGraphicsScene* UBToolWidget::scene() return qobject_cast(QGraphicsItem::scene()); } -void UBToolWidget::remove() +QPointF UBToolWidget::pos() const { - mGraphicsWebView->setHtml(QString()); - scene()->removeItem(this); + return QPointF(QGraphicsItem::pos().x() + mContentMargin * scale(), QGraphicsItem::pos().y() + mContentMargin * scale()); +} + +void UBToolWidget::setPos(const QPointF &point) +{ + UBToolWidget::setPos(point.x(), point.y()); +} + +void UBToolWidget::setPos(qreal x, qreal y) +{ + QGraphicsItem::setPos(x - mContentMargin * scale(), y - mContentMargin * scale()); +} + +int UBToolWidget::type() const +{ + return Type; } diff --git a/src/gui/UBToolWidget.h b/src/gui/UBToolWidget.h index fa23a459..94939d0f 100644 --- a/src/gui/UBToolWidget.h +++ b/src/gui/UBToolWidget.h @@ -18,10 +18,10 @@ #include #include +#include "core/UB.h" -class UBGraphicsWidgetItem; -class QWidget; class UBGraphicsScene; +class UBGraphicsWidgetItem; class UBToolWidget : public QGraphicsWidget { @@ -32,44 +32,45 @@ class UBToolWidget : public QGraphicsWidget UBToolWidget(UBGraphicsWidgetItem* pGraphicsWidgetItem, QGraphicsItem *pParent = 0); virtual ~UBToolWidget(); - void centerOn(const QPointF& pos); - + UBGraphicsWidgetItem* graphicsWidgetItem() const; QPointF naturalCenter() const; - UBGraphicsWidgetItem* graphicsWidgetItem() const; + void centerOn(const QPointF& pos); void remove(); + virtual UBGraphicsScene* scene(); + virtual QPointF pos() const; virtual void setPos(const QPointF &point); virtual void setPos(qreal x, qreal y); - virtual QPointF pos() const; + virtual int type() const; + + enum + { + Type = UBGraphicsItemType::ToolWidgetItemType + }; protected: void initialize(); - virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + virtual bool event(QEvent *event); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - - virtual bool eventFilter(QObject *obj, QEvent *event); + virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); private slots: void javaScriptWindowObjectCleared(); protected: - - static QPixmap *sClosePixmap; - static QPixmap *sUnpinPixmap; - - UBGraphicsWidgetItem *mGraphicsWidgetItem; - QGraphicsWebView *mGraphicsWebView; - - QPointF mMousePressPos; - bool mShouldMoveWidget; - int mContentMargin; int mFrameWidth; + QGraphicsWebView *mGraphicsWebView; + UBGraphicsWidgetItem *mGraphicsWidgetItem; + QPointF mMousePressPos; + + static QPixmap *sClosePixmap; + static QPixmap *sUnpinPixmap; }; #endif /* UBTOOLWIDGET_H_ */ diff --git a/src/podcast/quicktime/UBAudioQueueRecorder.cpp b/src/podcast/quicktime/UBAudioQueueRecorder.cpp index 12c94b63..cfe3b81a 100644 --- a/src/podcast/quicktime/UBAudioQueueRecorder.cpp +++ b/src/podcast/quicktime/UBAudioQueueRecorder.cpp @@ -139,7 +139,7 @@ QString UBAudioQueueRecorder::deviceUIDFromDeviceID(AudioDeviceID id) { char *cname = new char[1024]; - bool result = CFStringGetCString (name, cname, 1024, kCFStringEncodingASCII); + CFStringGetCString (name, cname, 1024, kCFStringEncodingASCII); int length = CFStringGetLength (name); uid = QString::fromAscii(cname, length); diff --git a/src/podcast/quicktime/UBQuickTimeFile.cpp b/src/podcast/quicktime/UBQuickTimeFile.cpp index 105cf83d..4caef665 100644 --- a/src/podcast/quicktime/UBQuickTimeFile.cpp +++ b/src/podcast/quicktime/UBQuickTimeFile.cpp @@ -151,7 +151,7 @@ bool UBQuickTimeFile::createCompressionSession() } OSStatus err = noErr; - ICMEncodedFrameOutputRecord encodedFrameOutputRecord = {0}; + ICMEncodedFrameOutputRecord encodedFrameOutputRecord = {NULL, NULL, NULL}; ICMCompressionSessionOptionsRef sessionOptions = 0; err = ICMCompressionSessionOptionsCreate(0, &sessionOptions); diff --git a/src/web/UBWebController.cpp b/src/web/UBWebController.cpp index dd2bf32b..b126f9a6 100644 --- a/src/web/UBWebController.cpp +++ b/src/web/UBWebController.cpp @@ -719,15 +719,16 @@ bool UBWebController::isEduMedia(const QUrl& pUrl) void UBWebController::loadUrl(const QUrl& url) { + UBApplication::applicationController->showInternet(); if (UBSettings::settings()->webUseExternalBrowser->get().toBool()) { QDesktopServices::openUrl(url); } else { - UBApplication::applicationController->showInternet(); + bool webBrowserAlreadyInstanciated = mStackedWidget->widget(WebBrowser) != NULL; - if (mCurrentWebBrowser && !(*mCurrentWebBrowser)) { + if (!webBrowserAlreadyInstanciated) { (*mCurrentWebBrowser)->loadUrl(url); } else {