").appendTo(img_block);
+ $("
").appendTo(img_block);
+ $("
").appendTo(img_block);
+}
+
+function refreshBlockNumbers(){
+ var i = 0;
+ $(".cont").each(function(){
+ $(this).find(".number_cont").text(++i);
+ })
+}
+
+//shuffles an array
+function shuffle( arr )
+{
+ var pos, tmp;
+
+ for( var i = 0; i < arr.length; i++ )
+ {
+ pos = Math.round( Math.random() * ( arr.length - 1 ) );
+ tmp = arr[pos];
+ arr[pos] = arr[i];
+ arr[i] = tmp;
+ }
+ return arr;
+}
+
+
+function stringToXML(text){
+ if (window.ActiveXObject){
+ var doc=new ActiveXObject('Microsoft.XMLDOM');
+ doc.async='false';
+ doc.loadXML(text);
+ } else {
+ var parser=new DOMParser();
+ doc=parser.parseFromString(text,'text/xml');
+ }
+ return doc;
+}
+
+function onDropTarget(obj, event) {
+ $(obj).find("img").remove();
+ if (event.dataTransfer) {
+ var format = "text/plain";
+ var textData = event.dataTransfer.getData(format);
+ if (!textData) {
+ alert(":(");
+ }
+ textData = stringToXML(textData);
+ var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
+ tmp = tmp.substr(1, tmp.length);
+ var tmp_img = $("
").attr("src", "../../" + tmp);
+ $(obj).append(tmp_img);
+ setTimeout(function(){
+ if(tmp_img.height() >= tmp_img.width())
+ tmp_img.attr("height", "120");
+ else{
+ tmp_img.attr("width","120");
+ tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
+ }
+ }, 6)
+ }
+ else {
+ alert ("Your browser does not support the dataTransfer object.");
+ }
+
+ if (event.stopPropagation) {
+ event.stopPropagation ();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ return false;
+}
+
diff --git a/resources/library/sankoreInteractivities/associer_images.wgt/locales/ru/img/drop_img.png b/resources/library/sankoreInteractivities/associer_images.wgt/locales/ru/img/drop_img.png
new file mode 100644
index 00000000..2796c020
Binary files /dev/null and b/resources/library/sankoreInteractivities/associer_images.wgt/locales/ru/img/drop_img.png differ
diff --git a/resources/library/sankoreInteractivities/associer_images.wgt/locales/ru/index.html b/resources/library/sankoreInteractivities/associer_images.wgt/locales/ru/index.html
new file mode 100644
index 00000000..1d40965b
--- /dev/null
+++ b/resources/library/sankoreInteractivities/associer_images.wgt/locales/ru/index.html
@@ -0,0 +1,36 @@
+
+
+
+
D'n'd
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/library/sankoreInteractivities/associer_images.wgt/locales/ru/js/script.js b/resources/library/sankoreInteractivities/associer_images.wgt/locales/ru/js/script.js
new file mode 100644
index 00000000..39a95966
--- /dev/null
+++ b/resources/library/sankoreInteractivities/associer_images.wgt/locales/ru/js/script.js
@@ -0,0 +1,656 @@
+var sankoreLang = {
+ display: "Показать",
+ edit: "Изменить",
+ short_desc: "Выберите число \"три\".",
+ add: "Новый блок"
+};
+
+//main function
+function start(){
+
+ $("#display_text").text(sankoreLang.display);
+ $("#edit_text").text(sankoreLang.edit);
+
+ if(window.sankore){
+ if(sankore.preference("associer","")){
+ var data = jQuery.parseJSON(sankore.preference("associer",""));
+ importData(data);
+ } else {
+ showExample();
+ }
+ }
+ else
+ showExample();
+ //events
+ $("body").live("mouseout",function(){
+ if(event.target.tagName == "BODY")
+ if(window.sankore)
+ exportData();
+ })
+
+ $("#display, #edit").click(function(event){
+ if(this.id == "display"){
+ if(!$(this).hasClass("selected")){
+ $(this).addClass("selected");
+ $("#display_img").removeClass("red_point").addClass("green_point");
+ $("#edit_img").removeClass("green_point").addClass("red_point");
+ $("#edit").removeClass("selected");
+ $(".add_block").remove();
+ $(".cont").each(function(){
+ var container = $(this);
+ var tmp_i = 0;
+ var tmp_array = [];
+
+ container.find(".text_cont").removeAttr("contenteditable");
+ container.find(".add_img").remove();
+ container.find(".close_cont").remove();
+ container.find(".img_block").each(function(){
+ if($(this).find("img").attr("src") != "img/drop_img.png"){
+ $(this).find(".close_img").remove();
+ $(this).find(".clear_img").remove();
+ $(this).find(".true_img").remove();
+ $(this).find(".false_img").remove();
+ $(this).removeAttr("ondragenter")
+ .removeAttr("ondragleave")
+ .removeAttr("ondragover")
+ .removeAttr("ondrop")
+ .addClass("img_gray");
+ } else
+ $(this).remove();
+ });
+ var img_answers = $("
").insertAfter(container.find(".sub_cont"));
+ container.find(".img_block").each(function(){
+ $(this).css("float","");
+ tmp_array.push($(this));
+ });
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i
");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+ });
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ $(this).addClass("selected");
+ $("#edit_img").removeClass("red_point").addClass("green_point");
+ $("#display_img").removeClass("green_point").addClass("red_point");
+ $("#display").removeClass("selected");
+
+ $(".cont").each(function(){
+ var container = $(this);
+ container.find(".imgs_answers").find(".img_block").each(function(){
+ $(this).appendTo(container.find(".imgs_cont"))
+ });
+ container.find(".imgs_answers").remove();
+ $("
").appendTo(container);
+ container.find(".text_cont").attr("contenteditable","true");
+ //container.find(".imgs_cont").sortable("destroy");
+ container.find(".imgs_cont").css("background-color", "white");
+
+ var add_img = $("
");
+ container.find(".img_block").each(function(){
+ $(this).draggable("destroy");
+ $(this).attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).css(\"background-color\",\"white\"); return false;")
+ .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
+ .attr("ondrop", "$(this).css(\"background-color\",\"white\"); return onDropTarget(this,event);")
+ .css("float","left");
+ $("
").appendTo($(this));
+ $("
").appendTo($(this));
+ if($(this).find("input").val() == "1"){
+ $("
").appendTo($(this));
+ }
+ else{
+ $("
").appendTo($(this));
+ }
+ });
+ container.find(".imgs_cont").append(add_img)
+ });
+
+ $("
" + sankoreLang.add + "
").appendTo("body");
+ }
+ }
+ });
+
+ //add new block
+ $(".add_block").live("click", function(){
+ addContainer();
+ });
+
+ //adding new img
+ $(".add_img").live("click", function(){
+ addImgBlock($(this));
+ });
+
+ //deleting a block
+ $(".close_cont").live("click",function(){
+ $(this).parent().remove();
+ refreshBlockNumbers();
+ });
+
+ //deleting the img block
+ $(".close_img").live("click", function(){
+ var i = 0;
+ var tmp_obj = $(this).parent().parent();
+ $(this).parent().remove();
+ });
+
+ //cleaning an image
+ $(".clear_img").live("click",function(){
+ $(this).parent().find("img").attr("src","img/drop_img.png");
+ });
+
+ //correct image
+ $(".true_img").live("click",function(){
+ $(this).parent().parent().find(".img_block").each(function(){
+ $(this).find("input").val(0);
+ var tmp_div = $(this).find(".false_img");
+ if(tmp_div)
+ tmp_div.removeClass("false_img").addClass("true_img");
+ })
+ $(this).parent().find("input").val(1);
+ $(this).removeClass("true_img").addClass("false_img");
+ });
+
+ //wrong image
+ $(".false_img").live("click",function(){
+ $(this).parent().find("input").val(0);
+ $(this).removeClass("false_img").addClass("true_img");
+ });
+}
+
+//export
+function exportData(){
+ var array_to_export = [];
+ if($("#edit").hasClass("selected")){
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.text = $(this).find(".text_cont").text();
+ cont_obj.mode = "edit";
+ cont_obj.imgs = [];
+ $(this).find(".img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.ht = $(this).find("img").height();
+ img_obj.wd = $(this).find("img").width();
+ cont_obj.imgs.push(img_obj);
+ });
+ array_to_export.push(cont_obj);
+ });
+ } else {
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.text = $(this).find(".text_cont").text();
+ cont_obj.mode = "display";
+ cont_obj.imgs = [];
+ if($(this).find(".imgs_answers").children()[0].tagName == "DIV"){
+ var tmp_cont = $(this).find(".imgs_answers").find(".img_block");
+ var img_obj = new Object();
+ img_obj.value = tmp_cont.find("input").val();
+ img_obj.link = tmp_cont.find("img").attr("src").replace("../../","");
+ img_obj.ht = tmp_cont.find("img").height();
+ img_obj.wd = tmp_cont.find("img").width();
+ img_obj.cont = "answers";
+ cont_obj.imgs.push(img_obj);
+ }
+ $(this).find(".imgs_cont .img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.ht = $(this).find("img").height();
+ img_obj.wd = $(this).find("img").width();
+ img_obj.cont = "cont";
+ cont_obj.imgs.push(img_obj);
+ });
+ array_to_export.push(cont_obj);
+ });
+ }
+ sankore.setPreference("associer", JSON.stringify(array_to_export));
+}
+
+//import
+function importData(data){
+
+ var tmp = 0;
+ for(var i in data){
+ if(data[i].mode == "edit"){
+ var tmp_array = [];
+ var container = $("
");
+ var sub_container = $("
").appendTo(container);
+ var imgs_answers = $("
").appendTo(container);
+ var imgs_container = $("
").appendTo(container);
+
+ var number = $("
"+ (++tmp) +"
").appendTo(sub_container);
+ var text = $("
" + data[i].text + "
").appendTo(sub_container);
+
+ for(var j in data[i].imgs){
+ var img_block = $("
");
+ var img = $("
");
+ img.height(data[i].imgs[j].ht).width(data[i].imgs[j].wd);
+ if((120 - data[i].imgs[j].ht) > 0)
+ img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
+ var hidden_input = $("
").val(data[i].imgs[j].value);
+ img_block.append(hidden_input).append(img);
+ tmp_array.push(img_block);
+ }
+ tmp_array = shuffle(tmp_array);
+ for(j in tmp_array){
+ tmp_array[j].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: 'body'
+ });
+ tmp_array[j].appendTo(imgs_container);
+ }
+ imgs_answers.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if($(this).children()[0].tagName == "IMG")
+ $(this).children().remove();
+ else
+ $(ui.draggable).parent().append($(this).children());
+ $(this).append($(ui.draggable));
+ if($(this).children().length == 1){
+ if($(this).children().find("input").val() == "1")
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ });
+ imgs_container.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_cont = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ tmp_cont.append("
");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+ container.appendTo("body");
+ } else {
+ container = $("
");
+ sub_container = $("
").appendTo(container);
+ imgs_answers = $("
").appendTo(container);
+ $("
").appendTo(imgs_answers);
+ imgs_container = $("
").appendTo(container);
+
+ number = $("
"+ (++tmp) +"
").appendTo(sub_container);
+ text = $("
" + data[i].text + "
").appendTo(sub_container);
+
+ for(j in data[i].imgs){
+ img_block = $("
");
+ img = $("
");
+ img.height(data[i].imgs[j].ht).width(data[i].imgs[j].wd);
+ if((120 - data[i].imgs[j].ht) > 0)
+ img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
+ hidden_input = $("
").val(data[i].imgs[j].value);
+ img_block.append(hidden_input).append(img);
+ img_block.draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: 'body'
+ });
+ if(data[i].imgs[j].cont == "cont")
+ img_block.appendTo(imgs_container);
+ else{
+ imgs_answers.empty();
+ img_block.appendTo(imgs_answers);
+ if(data[i].imgs[j].value == "1")
+ imgs_answers.addClass("imgs_answers_green");
+ else
+ imgs_answers.addClass("imgs_answers_red");
+ }
+ }
+
+ imgs_answers.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if($(this).children()[0].tagName == "IMG")
+ $(this).children().remove();
+ else
+ $(ui.draggable).parent().append($(this).children());
+ $(this).append($(ui.draggable));
+ if($(this).children().length == 1){
+ if($(this).children().find("input").val() == "1")
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ });
+ imgs_container.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_cont = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ tmp_cont.append("
");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+ container.appendTo("body");
+ }
+ }
+}
+
+//example
+function showExample(){
+
+ var tmp_array = [];
+
+ var container = $("
").appendTo("body");
+ var sub_container = $("
").appendTo(container);
+ var imgs_answers = $("
").appendTo(container);
+ var imgs_container = $("
").appendTo(container);
+
+ var number = $("
1
").appendTo(sub_container);
+ var text = $("
" + sankoreLang.short_desc + "
").appendTo(sub_container);
+
+ $("
").appendTo(imgs_container);
+
+ var img1 = $("
");
+ $("
").appendTo(img1);
+ $("
").appendTo(img1);
+ var img2 = $("
");
+ $("
").appendTo(img2);
+ $("
").appendTo(img2);
+ var img3 = $("
");
+ $("
").appendTo(img3);
+ $("
").appendTo(img3);
+ var img4 = $("
");
+ $("
").appendTo(img4);
+ $("
").appendTo(img4);
+ var img5 = $("
");
+ $("
").appendTo(img5);
+ $("
").appendTo(img5);
+
+ tmp_array.push(img1, img2, img3, img4, img5);
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i
");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+//container.appendTo("body")
+}
+
+//check result
+function checkResult(event)
+{
+ var str = "";
+ var right_str = $(event.target).find("input").val();
+ $(event.target).find(".img_block").each(function(){
+ str += $(this).find("input").val() + "*";
+ });
+ if(str == right_str)
+ $(event.target).css("background-color","#9f9");
+}
+
+//add new container
+function addContainer(){
+ var container = $("
");
+ var sub_container = $("
").appendTo(container);
+ var imgs_container = $("
").appendTo(container);
+
+ var close = $("
").appendTo(container);
+ var number = $("
"+ ($(".cont").size() + 1) +"
").appendTo(sub_container);
+ var text = $("
Enter your condition here ...
").appendTo(sub_container);
+
+ $("
").appendTo(imgs_container);
+ var add_img = $("
").appendTo(imgs_container);
+ container.insertBefore($(".add_block"));
+}
+
+//add new img block
+function addImgBlock(dest){
+ var img_block = $("
").insertBefore(dest);
+ $("
").appendTo(img_block);
+ $("
").appendTo(img_block);
+ $("
").appendTo(img_block);
+ $("
").appendTo(img_block);
+ $("
").appendTo(img_block);
+}
+
+function refreshBlockNumbers(){
+ var i = 0;
+ $(".cont").each(function(){
+ $(this).find(".number_cont").text(++i);
+ })
+}
+
+//shuffles an array
+function shuffle( arr )
+{
+ var pos, tmp;
+
+ for( var i = 0; i < arr.length; i++ )
+ {
+ pos = Math.round( Math.random() * ( arr.length - 1 ) );
+ tmp = arr[pos];
+ arr[pos] = arr[i];
+ arr[i] = tmp;
+ }
+ return arr;
+}
+
+
+function stringToXML(text){
+ if (window.ActiveXObject){
+ var doc=new ActiveXObject('Microsoft.XMLDOM');
+ doc.async='false';
+ doc.loadXML(text);
+ } else {
+ var parser=new DOMParser();
+ doc=parser.parseFromString(text,'text/xml');
+ }
+ return doc;
+}
+
+function onDropTarget(obj, event) {
+ $(obj).find("img").remove();
+ if (event.dataTransfer) {
+ var format = "text/plain";
+ var textData = event.dataTransfer.getData(format);
+ if (!textData) {
+ alert(":(");
+ }
+ textData = stringToXML(textData);
+ var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
+ tmp = tmp.substr(1, tmp.length);
+ var tmp_img = $("
").attr("src", "../../" + tmp);
+ $(obj).append(tmp_img);
+ setTimeout(function(){
+ if(tmp_img.height() >= tmp_img.width())
+ tmp_img.attr("height", "120");
+ else{
+ tmp_img.attr("width","120");
+ tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
+ }
+ }, 6)
+ }
+ else {
+ alert ("Your browser does not support the dataTransfer object.");
+ }
+
+ if (event.stopPropagation) {
+ event.stopPropagation ();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ return false;
+}
+
diff --git a/resources/library/sankoreInteractivities/associer_images.wgt/objects/0.gif b/resources/library/sankoreInteractivities/associer_images.wgt/objects/0.gif
new file mode 100644
index 00000000..0860a5fc
Binary files /dev/null and b/resources/library/sankoreInteractivities/associer_images.wgt/objects/0.gif differ
diff --git a/resources/library/sankoreInteractivities/associer_images.wgt/objects/1.gif b/resources/library/sankoreInteractivities/associer_images.wgt/objects/1.gif
new file mode 100644
index 00000000..c6d04fac
Binary files /dev/null and b/resources/library/sankoreInteractivities/associer_images.wgt/objects/1.gif differ
diff --git a/resources/library/sankoreInteractivities/associer_images.wgt/objects/2.gif b/resources/library/sankoreInteractivities/associer_images.wgt/objects/2.gif
new file mode 100644
index 00000000..f9d75b71
Binary files /dev/null and b/resources/library/sankoreInteractivities/associer_images.wgt/objects/2.gif differ
diff --git a/resources/library/sankoreInteractivities/associer_images.wgt/objects/3.gif b/resources/library/sankoreInteractivities/associer_images.wgt/objects/3.gif
new file mode 100644
index 00000000..189d1d37
Binary files /dev/null and b/resources/library/sankoreInteractivities/associer_images.wgt/objects/3.gif differ
diff --git a/resources/library/sankoreInteractivities/associer_images.wgt/objects/4.gif b/resources/library/sankoreInteractivities/associer_images.wgt/objects/4.gif
new file mode 100644
index 00000000..20f341c3
Binary files /dev/null and b/resources/library/sankoreInteractivities/associer_images.wgt/objects/4.gif differ
diff --git a/src/api/UBWidgetUniboardAPI.cpp b/src/api/UBWidgetUniboardAPI.cpp
index c9df1375..9f2b362e 100644
--- a/src/api/UBWidgetUniboardAPI.cpp
+++ b/src/api/UBWidgetUniboardAPI.cpp
@@ -16,6 +16,7 @@
#include
#include
+#include
#include "core/UB.h"
#include "core/UBApplication.h"
@@ -35,9 +36,35 @@
#include "UBWidgetMessageAPI.h"
#include "frameworks/UBFileSystemUtils.h"
+#include "core/UBDownloadManager.h"
#include "core/memcheck.h"
+//Known extentions for files, add if you know more supported
+const QString audioExtentions = ".mp3.wma.ogg";
+const QString videoExtentions = ".avi.flv";
+const QString imageExtentions = ".png.jpg.tif.bmp.tga";
+const QString htmlExtentions = ".htm.html.xhtml";
+
+//Allways use aliases instead of const char* itself
+const QString imageAlias = "image";
+const QString imageAliasCap = "Image";
+const QString videoAlias = "video";
+const QString videoAliasCap = "Video";
+const QString audioAlias = "audio";
+const QString audioAliasCap = "Audio";
+
+//Xml tag names
+const QString tMainSection = "mimedata";
+const QString tType = "type";
+const QString tPath = "path";
+const QString tMessage = "message";
+const QString tReady = "ready";
+
+const QString tMimeText = "text/plain";
+
+
+//Name of path inside widget to store objects
const QString objectsPath = "objects";
UBWidgetUniboardAPI::UBWidgetUniboardAPI(UBGraphicsScene *pScene, UBGraphicsWidgetItem *widget)
@@ -47,7 +74,7 @@ UBWidgetUniboardAPI::UBWidgetUniboardAPI(UBGraphicsScene *pScene, UBGraphicsWidg
, mIsVisible(false)
, mMessagesAPI(0)
, mDatastoreAPI(0)
-{
+ {
UBGraphicsW3CWidgetItem* w3CGraphicsWidget = dynamic_cast(widget);
if (w3CGraphicsWidget)
@@ -55,6 +82,8 @@ UBWidgetUniboardAPI::UBWidgetUniboardAPI(UBGraphicsScene *pScene, UBGraphicsWidg
mMessagesAPI = new UBWidgetMessageAPI(w3CGraphicsWidget->w3cWidget());
mDatastoreAPI = new UBDatastoreAPI(w3CGraphicsWidget);
}
+
+ connect(UBDownloadManager::downloadManager(), SIGNAL(downloadFinished(bool,sDownloadFileDesc,QByteArray)), this, SLOT(onDownloadFinished(bool,sDownloadFileDesc,QByteArray)));
}
@@ -297,6 +326,11 @@ int UBWidgetUniboardAPI::currentPageNumber()
return UBApplication::boardController->activeSceneIndex() + 1;
}
+QString UBWidgetUniboardAPI::getObjDir()
+{
+ return mGraphicsWidget->getOwnFolder().toLocalFile() + "/" + objectsPath + "/";
+}
+
void UBWidgetUniboardAPI::showMessage(const QString& message)
{
UBApplication::boardController->showMessage(message, false);
@@ -451,6 +485,196 @@ QString UBWidgetUniboardAPI::downloadUrl(const QString &objectUrl, const QString
return result;
}
+QString UBWidgetUniboardAPI::downloadWeb(const QString &objectUrl)
+{
+ // When we fall there, it means that we are dropping something from the web to the board
+ sDownloadFileDesc desc;
+ desc.dest = sDownloadFileDesc::graphicsWidget;
+ desc.modal = true;
+ desc.url = objectUrl;
+ desc.currentSize = 0;
+ desc.name = QFileInfo(objectUrl).fileName();
+ desc.totalSize = 0; // The total size will be retrieved during the download
+
+ registerIDWidget(UBDownloadManager::downloadManager()->addFileToDownload(desc));
+ return QString();
+}
+
+void UBWidgetUniboardAPI::ProcessDropEvent(QDropEvent *event)
+{
+ const QMimeData *pMimeData = event->mimeData();
+
+ QString destFileName;
+ QString contentType;
+ bool downloaded = false;
+
+ QGraphicsView *tmpView = mGraphicsWidget->scene()->views().at(0);
+ QPoint dropPoint(mGraphicsWidget->mapFromScene(tmpView->mapToScene(event->pos())).toPoint());
+ Qt::DropActions dropActions = event->dropAction();
+ Qt::MouseButtons dropMouseButtons = event->mouseButtons();
+ Qt::KeyboardModifiers dropModifiers = event->keyboardModifiers();
+ QMimeData dropMimeData;
+
+
+ if (pMimeData->hasHtml()) { //Dropping element from web browser
+ QString qsHtml = pMimeData->html();
+ QString url = UBApplication::urlFromHtml(qsHtml);
+
+ if(!url.isEmpty()) {
+ QString str = "test string";
+
+ QMimeData mimeData;
+ mimeData.setData(tMimeText, str.toAscii());
+
+ sDownloadFileDesc desc;
+ desc.dest = sDownloadFileDesc::graphicsWidget;
+ desc.modal = true;
+ desc.url = url;
+ desc.currentSize = 0;
+ desc.name = QFileInfo(url).fileName();
+ desc.totalSize = 0; // The total size will be retrieved during the download
+
+ desc.dropPoint = event->pos(); //Passing pure event point. No modifications
+ desc.dropActions = dropActions;
+ desc.dropMouseButtons = dropMouseButtons;
+ desc.dropModifiers = dropModifiers;
+
+ registerIDWidget(UBDownloadManager::downloadManager()->addFileToDownload(desc));
+
+// return;
+ }
+
+ } else if (pMimeData->hasUrls()) { //Local file processing
+ QUrl curUrl = pMimeData->urls().first();
+ QString sUrl = curUrl.toString();
+
+ if (sUrl.startsWith("file://") || sUrl.startsWith("/")) {
+ QString fileName = curUrl.toLocalFile();
+ QString extention = UBFileSystemUtils::extension(fileName);
+ contentType = UBFileSystemUtils::mimeTypeFromFileName(fileName);
+
+ if (supportedTypeHeader(contentType)) {
+ destFileName = getObjDir() + QUuid::createUuid().toString() + extention;
+
+ if (!UBFileSystemUtils::copyFile(fileName, destFileName)) {
+ qDebug() << "can't copy from" << fileName << "to" << destFileName;
+ return;
+ }
+ downloaded = true;
+
+ }
+ }
+ }
+
+ QString mimeText = createMimeText(downloaded, contentType, destFileName);
+ dropMimeData.setData(tMimeText, mimeText.toAscii());
+
+ QDropEvent readyEvent(dropPoint, dropActions, &dropMimeData, dropMouseButtons, dropModifiers);
+ //sending event to destination either it had been downloaded or not
+ QApplication::sendEvent(mGraphicsWidget->widgetWebView(),&readyEvent);
+// readyEvent.acceptProposedAction();
+}
+
+void UBWidgetUniboardAPI::onDownloadFinished(bool pSuccess, sDownloadFileDesc desc, QByteArray pData)
+{
+ //if widget recieves is waiting for this id then process
+ if (!takeIDWidget(desc.id))
+ return;
+
+ if (!pSuccess) {
+ qDebug() << "can't download the whole data. An error occured";
+ return;
+ }
+
+ QString contentType = desc.contentTypeHeader;
+ QString extention = UBFileSystemUtils::fileExtensionFromMimeType(contentType);
+
+ if (!supportedTypeHeader(contentType)) {
+ qDebug() << "actions for mime type" << contentType << "are not supported";
+ return;
+ }
+
+ QString objDir = getObjDir();
+ if (!QDir().exists(objDir)) {
+ if (!QDir().mkpath(objDir)) {
+ qDebug() << "can't create objects directory path. Check the permissions";
+ return;
+ }
+ }
+
+ QString destFileName = objDir + QUuid::createUuid() + "." + extention;
+ QFile destFile(destFileName);
+
+ if (!destFile.open(QIODevice::WriteOnly)) {
+ qDebug() << "can't open" << destFileName << "for wrighting";
+ return;
+ }
+
+ if (destFile.write(pData) == -1) {
+ qDebug() << "can't implement data writing";
+ return;
+ }
+
+ QGraphicsView *tmpView = mGraphicsWidget->scene()->views().at(0);
+ QPoint dropPoint(mGraphicsWidget->mapFromScene(tmpView->mapToScene(desc.dropPoint)).toPoint());
+
+ QMimeData dropMimeData;
+ QString mimeText = createMimeText(true, contentType, destFileName);
+ dropMimeData.setData(tMimeText, mimeText.toAscii());
+
+ destFile.close();
+
+ QDropEvent readyEvent(dropPoint, desc.dropActions, &dropMimeData, desc.dropMouseButtons, desc.dropModifiers);
+ //sending event to destination either it had been downloaded or not
+ QApplication::sendEvent(mGraphicsWidget->widgetWebView(),&readyEvent);
+ readyEvent.acceptProposedAction();
+}
+
+QString UBWidgetUniboardAPI::createMimeText(bool downloaded, const QString &mimeType, const QString &fileName)
+{
+ QString mimeXml;
+ QXmlStreamWriter writer(&mimeXml);
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument();
+ writer.writeStartElement(tMainSection);
+
+ writer.writeTextElement(tReady, boolToStr(downloaded));
+
+ if (downloaded) {
+ if (!mimeType.isEmpty()) {
+ writer.writeTextElement(tType, mimeType); //writing type of element
+ }
+ if (!QFile::exists(fileName)) {
+ qDebug() << "file" << fileName << "doesn't exist";
+ return QString();
+ }
+
+ QString relatedFileName = fileName;
+ relatedFileName = relatedFileName.remove(mGraphicsWidget->getOwnFolder().toLocalFile());
+ writer.writeTextElement(tPath, relatedFileName); //writing path to created object
+ }
+
+ writer.writeEndElement();
+ writer.writeEndDocument();
+
+ return mimeXml;
+}
+
+bool UBWidgetUniboardAPI::supportedTypeHeader(const QString &typeHeader) const
+{
+ return typeHeader.startsWith(imageAlias) || typeHeader.startsWith(imageAliasCap)
+ || typeHeader.startsWith(audioAlias) || typeHeader.startsWith(audioAliasCap)
+ || typeHeader.startsWith(videoAlias) || typeHeader.startsWith(videoAliasCap);
+}
+
+bool UBWidgetUniboardAPI::takeIDWidget(int id)
+{
+ if (webDownloadIds.contains(id)) {
+ webDownloadIds.removeAll(id);
+ return true;
+ }
+ return false;
+}
UBDocumentDatastoreAPI::UBDocumentDatastoreAPI(UBGraphicsW3CWidgetItem *graphicsWidget)
diff --git a/src/api/UBWidgetUniboardAPI.h b/src/api/UBWidgetUniboardAPI.h
index 56188d03..66731e87 100644
--- a/src/api/UBWidgetUniboardAPI.h
+++ b/src/api/UBWidgetUniboardAPI.h
@@ -16,8 +16,10 @@
#define UBWIDGETAPI_H
#include
+#include
#include "UBW3CWidgetAPI.h"
+#include "core/UBDownloadManager.h"
class UBGraphicsScene;
class UBGraphicsWidgetItem;
@@ -245,6 +247,15 @@ class UBWidgetUniboardAPI : public QObject
* this method download the object on the widget directory and return the path of the downloaded object
*/
QString downloadUrl(const QString &objectUrl, const QString &extention = "");
+ QString downloadWeb(const QString &objectUrl);
+ void ProcessDropEvent(QDropEvent *);
+
+private slots:
+ void onDownloadFinished(bool pSuccess, sDownloadFileDesc desc, QByteArray pData);
+
+private:
+ inline void registerIDWidget(int id){webDownloadIds.append(id);}
+ inline bool takeIDWidget(int id);
private:
@@ -255,6 +266,10 @@ class UBWidgetUniboardAPI : public QObject
int pageCount();
int currentPageNumber();
+ QString getObjDir();
+ QString createMimeText(bool downloaded, const QString &mimeType, const QString &fileName);
+ bool supportedTypeHeader(const QString &) const;
+ QString boolToStr(bool value) const {return value ? "true" : "false";}
UBGraphicsScene* mScene;
@@ -265,7 +280,7 @@ class UBWidgetUniboardAPI : public QObject
UBWidgetMessageAPI* mMessagesAPI;
UBDatastoreAPI* mDatastoreAPI;
-
+ QList webDownloadIds;
};
diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp
index 94ccc729..1cf8683d 100644
--- a/src/board/UBBoardView.cpp
+++ b/src/board/UBBoardView.cpp
@@ -52,7 +52,6 @@
#include "core/memcheck.h"
-
//Known extentions for files, add if you know more supported
const QString audioExtentions = ".mp3.wma.ogg";
const QString videoExtentions = ".avi.flv";
@@ -65,11 +64,6 @@ const QString videoAlias = "video";
const QString audioAlias = "audio";
const QString htmlAlias = "html";
-//Xml tag names
-const QString tMainSection = "mimedata";
-const QString tType = "type";
-const QString tPath = "path";
-
UBBoardView::UBBoardView (UBBoardController* pController, QWidget* pParent)
: QGraphicsView (pParent)
, mController (pController)
@@ -643,7 +637,6 @@ UBBoardView::forcedTabletRelease ()
mMouseButtonIsPressed = false;
mTabletStylusIsPressed = false;
mPendingStylusReleaseEvent = false;
-
}
}
@@ -766,50 +759,7 @@ void UBBoardView::dragMoveEvent (QDragMoveEvent *event)
}
}
-QString UBBoardView::processMimeData(const QMimeData *pMimeData, UBGraphicsWidgetItem *widget)
-{
- QString mimeXml;
- QXmlStreamWriter writer(&mimeXml);
- writer.setAutoFormatting(true);
- writer.writeStartDocument();
- writer.writeStartElement(tMainSection);
-
- if (pMimeData->hasUrls()) {
- QList urls = pMimeData->urls();
-
- QString ext = fileExtention(urls.at(0).toLocalFile());
- if (ext.isNull()) {
- qDebug() << "unknown file type";
- return QString();
- }
- QString fileType = typeForExtention(ext);
- if (fileType.isNull()) {
- qDebug() << "unknown extention";
- return QString();
- }
-
- //writing type of element
- writer.writeTextElement(tType, fileType);
-
- QString fileName = urls.at(0).toLocalFile();
- QString destName = widget->downloadUrl(fileName, ext);
-
- if (destName.isNull()) {
- qDebug() << "error at creating destination folder";
- return QString();
- }
-
- //writing path to created object
- writer.writeTextElement(tPath, destName);
- }
-
- writer.writeEndElement();
- writer.writeEndDocument();
-
- return mimeXml;
-}
-
-QString UBBoardView::fileExtention(const QString &filename)
+QString UBBoardView::fileExtention(const QString &filename) const
{
int pos = filename.lastIndexOf(".");
if (pos != -1)
@@ -817,7 +767,7 @@ QString UBBoardView::fileExtention(const QString &filename)
else
return QString();
}
-QString UBBoardView::typeForExtention(const QString &extention)
+QString UBBoardView::typeForExtention(const QString &extention) const
{
if (extention.isEmpty())
return QString();
@@ -836,8 +786,12 @@ QString UBBoardView::typeForExtention(const QString &extention)
return result;
}
-bool UBBoardView::isDropableData(const QMimeData *pMimeData)
+bool UBBoardView::isDropableData(const QMimeData *pMimeData) const
{
+ if (pMimeData->hasHtml()) {
+ return true;
+ }
+
if (pMimeData->hasUrls()) {
if (!typeForExtention(fileExtention(pMimeData->urls().at(0).toLocalFile())).isNull()) {
return true;
@@ -853,25 +807,17 @@ void UBBoardView::dropEvent (QDropEvent *event)
QGraphicsItem* graphicsItemAtPos = itemAt(event->pos().x(),event->pos().y());
UBGraphicsWidgetItem* graphicsWidget = dynamic_cast(graphicsItemAtPos);
- if (graphicsWidget && graphicsWidget->acceptDrops()){
- // A new event is build to avoid problem related to different way to pass the mime type
- // A parsing is done to try to provide a mimeType with only urls.
- QMimeData mimeData;
- QString str = processMimeData(event->mimeData(), graphicsWidget);
- mimeData.setData("text/plain", str.toAscii());
- QPoint newPoint(graphicsWidget->mapFromScene(mapToScene(event->pos())).toPoint());
- QDropEvent cleanedEvent(newPoint, event->dropAction(), &mimeData, event->mouseButtons(), event->keyboardModifiers());
- QApplication::sendEvent(graphicsWidget->widgetWebView(),&cleanedEvent);
- cleanedEvent.acceptProposedAction();
+ if (graphicsWidget && graphicsWidget->acceptDrops()) {
+
+ graphicsWidget->processDropEvent(event);
event->acceptProposedAction();
- return;
- }
- qDebug() << event->source();
- if(!event->source() || dynamic_cast(event->source()) || dynamic_cast(event->source()) || dynamic_cast(event->source()) || dynamic_cast(event->source()) || dynamic_cast(event->source()))
- {
+ } else if (!event->source() || dynamic_cast(event->source())
+ || dynamic_cast(event->source()) || dynamic_cast(event->source())
+ || dynamic_cast(event->source()) || dynamic_cast(event->source())) {
+
mController->processMimeData (event->mimeData (), mapToScene (event->pos ()));
- event->acceptProposedAction ();
+ event->acceptProposedAction();
}
}
diff --git a/src/board/UBBoardView.h b/src/board/UBBoardView.h
index 92f9cd61..5353c711 100644
--- a/src/board/UBBoardView.h
+++ b/src/board/UBBoardView.h
@@ -89,7 +89,7 @@ class UBBoardView : public QGraphicsView
QList processMimeData(const QMimeData* pMimeData);
QString processMimeData(const QMimeData *pMimeData, UBGraphicsWidgetItem *widget);
- bool isDropableData(const QMimeData *pMimeData);
+ bool isDropableData(const QMimeData *pMimeData) const;
UBBoardController* mController;
@@ -118,8 +118,8 @@ class UBBoardView : public QGraphicsView
bool mVirtualKeyboardActive;
bool mOkOnWidget;
- QString typeForExtention(const QString &extention);
- QString fileExtention(const QString &filename);
+ QString typeForExtention(const QString &extention) const;
+ QString fileExtention(const QString &filename) const;
private slots:
diff --git a/src/core/UBDownloadManager.cpp b/src/core/UBDownloadManager.cpp
index d4442f21..a20b0bc2 100644
--- a/src/core/UBDownloadManager.cpp
+++ b/src/core/UBDownloadManager.cpp
@@ -70,7 +70,7 @@ void UBDownloadManager::destroy()
* \brief Add a file to the download list
* @param desc as the given file description
*/
-void UBDownloadManager::addFileToDownload(sDownloadFileDesc desc)
+int UBDownloadManager::addFileToDownload(sDownloadFileDesc desc)
{
// Set the ID for this download
desc.id = mLastID;
@@ -89,6 +89,8 @@ void UBDownloadManager::addFileToDownload(sDownloadFileDesc desc)
UBApplication::boardController->paletteManager()->startDownloads();
emit fileAddedToDownload();
+
+ return desc.id;
}
/**
@@ -144,8 +146,7 @@ void UBDownloadManager::onUpdateDownloadLists()
// If we fall here that means that there is no pending download
break;
}
- if(-1 == mDLAvailability.at(i))
- {
+ if(-1 == mDLAvailability.at(i)) {
// Pending downloads exist and a download 'slot' is available
// Let's move the first pending download to the current download
// list and fill the slot
@@ -194,13 +195,21 @@ void UBDownloadManager::onDownloadProgress(int id, qint64 received, qint64 total
*/
void UBDownloadManager::onDownloadFinished(int id, bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground)
{
+// Temporary data for dnd do not delete it please
+ Q_UNUSED(pPos)
+ Q_UNUSED(pSize)
+ Q_UNUSED(isBackground)
+
for(int i=0; i
#include
#include
+#include
#include "UBDownloadThread.h"
@@ -26,18 +27,44 @@
#define SIMULTANEOUS_DOWNLOAD 2 // Maximum 5 because of QNetworkAccessManager limitation!!!
-typedef struct
+struct sDownloadFileDesc
{
+ enum eDestinations {
+ board //default for sDownloadFileDesc
+ , library
+ , graphicsWidget
+ };
+ //creating constructor to make sure to have default values
+ sDownloadFileDesc() :
+ dest(board)
+ , id(0)
+ , totalSize(0)
+ , currentSize(0)
+ , modal(false)
+ , isBackground(false)
+ , dropActions(Qt::IgnoreAction)
+ , dropMouseButtons(Qt::NoButton)
+ , dropModifiers(Qt::NoModifier)
+ {;}
+
+ eDestinations dest;
QString name;
int id;
int totalSize;
int currentSize;
QString url;
+ QString contentTypeHeader;
bool modal;
QPointF pos; // For board drop only
QSize size; // For board drop only
bool isBackground; // For board drop only
-}sDownloadFileDesc;
+
+ QPoint dropPoint; //For widget's Drop event
+ Qt::DropActions dropActions; //For widget's Drop event
+ Qt::MouseButtons dropMouseButtons; //For widget's Drop event
+ Qt::KeyboardModifiers dropModifiers; //For widget's Drop event
+};
+
class UBDownloadHttpFile : public UBHttpGet
{
@@ -66,7 +93,7 @@ public:
UBDownloadManager(QObject* parent=0, const char* name="UBDownloadManager");
~UBDownloadManager();
static UBDownloadManager* downloadManager();
- void addFileToDownload(sDownloadFileDesc desc);
+ int addFileToDownload(sDownloadFileDesc desc);
QVector currentDownloads();
QVector pendingDownloads();
void cancelDownloads();
@@ -78,6 +105,8 @@ signals:
void fileAddedToDownload();
void downloadUpdated(int id, qint64 crnt, qint64 total);
void downloadFinished(int id);
+ void downloadFinished(bool pSuccess, int id, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData);
+ void downloadFinished(bool pSuccess, sDownloadFileDesc desc, QByteArray pData);
void downloadModalFinished();
void addDownloadedFileToBoard(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground);
void addDownloadedFileToLibrary(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData);
diff --git a/src/customWidgets/UBActionableWidget.cpp b/src/customWidgets/UBActionableWidget.cpp
index 20ddaf69..65e440a3 100644
--- a/src/customWidgets/UBActionableWidget.cpp
+++ b/src/customWidgets/UBActionableWidget.cpp
@@ -8,6 +8,10 @@ UBActionableWidget::UBActionableWidget(QWidget *parent, const char *name):QWidge
{
setObjectName(name);
mActions.clear();
+ mCloseButtons.setIcon(QIcon(QPixmap(":images/close.svg")));
+ mCloseButtons.setGeometry(0, 0, 2*ACTIONSIZE, ACTIONSIZE);
+ mCloseButtons.setVisible(false);
+ connect(&mCloseButtons, SIGNAL(clicked()), this, SLOT(onCloseClicked()));
}
UBActionableWidget::~UBActionableWidget()
@@ -36,36 +40,26 @@ void UBActionableWidget::removeAllActions()
void UBActionableWidget::setActionsVisible(bool bVisible)
{
- mShowActions = bVisible;
+ if(!mActions.empty() && mActions.contains(eAction_Close)){
+ mCloseButtons.setVisible(bVisible);
+ }
}
-bool UBActionableWidget::shouldClose(QPoint p)
+void UBActionableWidget::onCloseClicked()
{
- qDebug() << "Should close: " << p.x() << "," << p.y();
- bool close = false;
+ emit close(this);
+}
- if(mShowActions &&
- p.x() >= 0 &&
- p.x() <= ACTIONSIZE &&
- p.y() >= 0 &&
- p.y() <= ACTIONSIZE){
- close = true;
+void UBActionableWidget::setActionsParent(QWidget *parent)
+{
+ if(mActions.contains(eAction_Close)){
+ mCloseButtons.setParent(parent);
}
-
- return close;
}
-void UBActionableWidget::paintEvent(QPaintEvent* ev)
+void UBActionableWidget::unsetActionsParent()
{
- Q_UNUSED(ev);
- if(mShowActions){
- QPainter p(this);
- if(mActions.contains(eAction_Close)){
- p.drawPixmap(0, 0, 16, 16, QPixmap(":images/close.svg"));
- }else if(mActions.contains(eAction_MoveUp)){
- // Implement me later
- }else if(mActions.contains(eAction_MoveDown)){
- // Implement me later
- }
+ if(mActions.contains(eAction_Close)){
+ mCloseButtons.setParent(this);
}
}
diff --git a/src/customWidgets/UBActionableWidget.h b/src/customWidgets/UBActionableWidget.h
index 12b2a2fb..683463df 100644
--- a/src/customWidgets/UBActionableWidget.h
+++ b/src/customWidgets/UBActionableWidget.h
@@ -3,6 +3,8 @@
#include
#include
+#include
+#include
#define ACTIONSIZE 16
@@ -22,14 +24,22 @@ public:
void removeAction(eAction act);
void removeAllActions();
void setActionsVisible(bool bVisible);
- bool shouldClose(QPoint p);
+
+signals:
+ void close(QWidget* w);
protected:
- void paintEvent(QPaintEvent* ev);
+ void setActionsParent(QWidget* parent);
+ void unsetActionsParent();
QVector mActions;
+ QPushButton mCloseButtons;
+
+private slots:
+ void onCloseClicked();
private:
bool mShowActions;
+
};
#endif // UBACTIONABLEWIDGET_H
diff --git a/src/customWidgets/UBDraggableMedia.cpp b/src/customWidgets/UBDraggableMedia.cpp
index 7b976707..4136f742 100644
--- a/src/customWidgets/UBDraggableMedia.cpp
+++ b/src/customWidgets/UBDraggableMedia.cpp
@@ -5,7 +5,7 @@
UBDraggableMedia::UBDraggableMedia(eMediaType type, QWidget *parent, const char *name):UBMediaWidget(type, parent, name)
{
-
+ removeAllActions();
}
UBDraggableMedia::~UBDraggableMedia()
diff --git a/src/customWidgets/UBMediaWidget.cpp b/src/customWidgets/UBMediaWidget.cpp
index 8fb69cc3..4bef693b 100644
--- a/src/customWidgets/UBMediaWidget.cpp
+++ b/src/customWidgets/UBMediaWidget.cpp
@@ -67,6 +67,7 @@ UBMediaWidget::UBMediaWidget(eMediaType type, QWidget *parent, const char *name)
*/
UBMediaWidget::~UBMediaWidget()
{
+ unsetActionsParent();
DELETEPTR(mpSlider);
DELETEPTR(mpPauseButton);
DELETEPTR(mpPlayStopButton);
@@ -152,6 +153,7 @@ void UBMediaWidget::createMediaPlayer()
}
mLayout.addWidget(mpMediaContainer, 1);
mLayout.addLayout(&mSeekerLayout, 0);
+ setActionsParent(mpMediaContainer);
}
/**
diff --git a/src/customWidgets/UBMediaWidget.h b/src/customWidgets/UBMediaWidget.h
index 01b0a0b6..dbc85b78 100644
--- a/src/customWidgets/UBMediaWidget.h
+++ b/src/customWidgets/UBMediaWidget.h
@@ -69,6 +69,8 @@ public:
eMediaType mediaType();
int border();
void setAudioCover(const QString& coverPath);
+ void setUrl(const QString& url){mUrl = url;}
+ QString url(){return mUrl;}
protected:
void resizeEvent(QResizeEvent* ev);
@@ -118,6 +120,8 @@ private:
QHBoxLayout mMediaLayout;
/** The audio cover */
QLabel* mpCover;
+ /** The media url */
+ QString mUrl;
};
#endif // UBMEDIAWIDGET_H
diff --git a/src/customWidgets/UBWidgetList.cpp b/src/customWidgets/UBWidgetList.cpp
index bc0d89d4..a9e9a305 100644
--- a/src/customWidgets/UBWidgetList.cpp
+++ b/src/customWidgets/UBWidgetList.cpp
@@ -10,7 +10,7 @@ UBWidgetList::UBWidgetList(QWidget* parent, eWidgetListOrientation orientation,
, mCanRemove(true)
, mpLayout(NULL)
, mpContainer(NULL)
- , mMargin(5)
+ , mMargin(10)
, mListElementsSpacing(10)
, mpEmptyLabel(NULL)
, mpCurrentWidget(NULL)
@@ -69,6 +69,9 @@ void UBWidgetList::removeWidget(QWidget *widget)
if(0 == mpLayout->count()){
mpEmptyLabel->setVisible(true);
}
+ if(mpCurrentWidget == widget){
+ mpCurrentWidget = NULL;
+ }
}
}
@@ -140,22 +143,15 @@ void UBWidgetList::mousePressEvent(QMouseEvent *ev)
if(mCanRemove){
QWidget* pWAt = widgetAt(ev->pos());
if(NULL != mpCurrentWidget){
- if(pWAt == mpCurrentWidget){
- QPoint p;
- p.setX(ev->x());
- p.setY(ev->y());
- if(mpCurrentWidget->shouldClose(p)){
- emit closeWidget(mpCurrentWidget);
- return;
- }
-
- }else{
+ if(pWAt != mpCurrentWidget){
mpCurrentWidget->setActionsVisible(false);
+ update();
}
}
mpCurrentWidget = dynamic_cast(pWAt);
if(NULL != mpCurrentWidget){
mpCurrentWidget->setActionsVisible(true);
+ update();
}
}
update();
@@ -231,6 +227,3 @@ bool UBWidgetList::empty()
{
return mWidgetInfo.empty();
}
-
-// TODO : - add onHover 'delete' button
-
diff --git a/src/domain/UBAbstractWidget.cpp b/src/domain/UBAbstractWidget.cpp
index 0a598156..8832317b 100644
--- a/src/domain/UBAbstractWidget.cpp
+++ b/src/domain/UBAbstractWidget.cpp
@@ -428,7 +428,10 @@ void UBAbstractWidget::paintEvent(QPaintEvent * event)
p.drawText(rect(), Qt::AlignCenter, message);
}
}
-
+void UBAbstractWidget::dropEvent(QDropEvent *event)
+{
+ QWebView::dropEvent(event);
+}
QPixmap UBAbstractWidget::takeSnapshot()
{
diff --git a/src/domain/UBAbstractWidget.h b/src/domain/UBAbstractWidget.h
index 5c077d04..d2b65466 100644
--- a/src/domain/UBAbstractWidget.h
+++ b/src/domain/UBAbstractWidget.h
@@ -131,6 +131,7 @@ class UBAbstractWidget : public UBRoutedMouseEventWebView
virtual void injectInlineJavaScript();
virtual void paintEvent(QPaintEvent * event);
+ virtual void dropEvent(QDropEvent *);
protected slots:
diff --git a/src/domain/UBGraphicsWidgetItem.cpp b/src/domain/UBGraphicsWidgetItem.cpp
index 61d49413..aace8aa2 100644
--- a/src/domain/UBGraphicsWidgetItem.cpp
+++ b/src/domain/UBGraphicsWidgetItem.cpp
@@ -258,6 +258,14 @@ QString UBGraphicsWidgetItem::downloadUrl(const QString &fileUrl, const QString
{
return mUniboardAPI->downloadUrl(fileUrl, extention);
}
+QString UBGraphicsWidgetItem::downloadWeb(const QString &fileUrl)
+{
+ return mUniboardAPI->downloadWeb(fileUrl);
+}
+void UBGraphicsWidgetItem::processDropEvent(QDropEvent *event)
+{
+ return mUniboardAPI->ProcessDropEvent(event);
+}
UBGraphicsAppleWidgetItem::UBGraphicsAppleWidgetItem(const QUrl& pWidgetUrl, QGraphicsItem *parent)
: UBGraphicsWidgetItem(parent)
diff --git a/src/domain/UBGraphicsWidgetItem.h b/src/domain/UBGraphicsWidgetItem.h
index 2be7b8af..26cbb3dc 100644
--- a/src/domain/UBGraphicsWidgetItem.h
+++ b/src/domain/UBGraphicsWidgetItem.h
@@ -62,11 +62,13 @@ class UBGraphicsWidgetItem : public UBGraphicsProxyWidget
QMap datastoreEntries() const;
void removeDatastoreEntry(const QString& key);
void removeAllDatastoreEntries();
- virtual UBGraphicsItemDelegate* Delegate() const {return mDelegate;}
+ virtual UBGraphicsItemDelegate* Delegate() const {return mDelegate; }
virtual void remove();
void removeScript();
QString downloadUrl(const QString &fileUrl, const QString &extention);
+ QString downloadWeb(const QString &fileUrl);
+ void processDropEvent(QDropEvent *event);
virtual void setOwnFolder(const QUrl &newFolder) {ownFolder = newFolder;}
virtual QUrl getOwnFolder() const {return ownFolder;}
diff --git a/src/gui/UBTBPageEditWidget.cpp b/src/gui/UBTBPageEditWidget.cpp
index 7957d6ab..d840ad39 100644
--- a/src/gui/UBTBPageEditWidget.cpp
+++ b/src/gui/UBTBPageEditWidget.cpp
@@ -142,6 +142,7 @@ void UBTBPageEditWidget::onActionButton()
UBTeacherStudentAction* pAction = new UBTeacherStudentAction(this);
mActions << pAction;
mpActions->addWidget(pAction);
+ connectActions(pAction);
emit valueChanged();
}
@@ -150,6 +151,7 @@ void UBTBPageEditWidget::onLinkButton()
UBUrlWidget* pUrl = new UBUrlWidget(this);
mUrls << pUrl;
mpLinks->addWidget(pUrl);
+ connectActions(pUrl);
emit valueChanged();
}
@@ -163,11 +165,20 @@ void UBTBPageEditWidget::onMediaDropped(const QString &url)
//mpDataMgr->medias()->append(pMedia);
//mpDataMgr->addMediaUrl(url);
mpMediaContainer->addWidget(pMedia);
+ connectActions(pMedia);
emit valueChanged();
}
}
}
+void UBTBPageEditWidget::connectActions(QWidget* w)
+{
+ UBActionableWidget* pActionable = dynamic_cast(w);
+ if(NULL != pActionable){
+ connect(pActionable, SIGNAL(close(QWidget*)), this, SLOT(onCloseWidget(QWidget*)));
+ }
+}
+
void UBTBPageEditWidget::onDocumentEditClicked()
{
emit changeTBState(eTeacherBarState_DocumentEdit);
@@ -217,6 +228,7 @@ void UBTBPageEditWidget::updateFields()
pAction->setText(action.content);
mActions << pAction;
mpActions->addWidget(pAction);
+ connectActions(pAction);
}
// Medias
foreach(QString url, *mpDataMgr->mediaUrls()){
@@ -226,6 +238,7 @@ void UBTBPageEditWidget::updateFields()
if(pWidget != NULL){
mMedias << pWidget;
mpMediaContainer->addWidget(pWidget);
+ connectActions(pWidget);
}
}
}
@@ -237,6 +250,7 @@ void UBTBPageEditWidget::updateFields()
urlWidget->setUrl(link.link);
mUrls << urlWidget;
mpLinks->addWidget(urlWidget);
+ connectActions(urlWidget);
}
// Comments
mpComments->document()->setPlainText(mpDataMgr->comments());
@@ -287,7 +301,15 @@ void UBTBPageEditWidget::onCloseWidget(QWidget *w)
mpLinks->removeWidget(pW);
mUrls.remove(mUrls.indexOf(pW));
DELETEPTR(w);
- }else if("UBTBMediaPicture" == w->objectName() || "UBMediaWidget" == w->objectName()){
+ }else if("UBTBMediaPicture" == w->objectName()){
+ UBPictureWidget* pW = dynamic_cast(w);
+ mMediaUrls.removeOne(pW->url());
+ mpMediaContainer->removeWidget(w);
+ mMedias.remove(mMedias.indexOf(w));
+ DELETEPTR(w);
+ }else if("UBMediaWidget" == w->objectName()){
+ UBMediaWidget* pW = dynamic_cast(w);
+ mMediaUrls.removeOne(pW->url());
mpMediaContainer->removeWidget(w);
mMedias.remove(mMedias.indexOf(w));
DELETEPTR(w);
@@ -326,10 +348,12 @@ UBUrlWidget::UBUrlWidget(QWidget *parent, const char *name):UBActionableWidget(p
mpLayout->addLayout(mpTitleLayout);
mpLayout->addLayout(mpLabelLayout);
+ setActionsParent(this);
}
UBUrlWidget::~UBUrlWidget()
{
+ unsetActionsParent();
DELETEPTR(mpTitle);
DELETEPTR(mpTitleLabel);
DELETEPTR(mpUrlLabel);
@@ -460,6 +484,7 @@ QWidget* UBTBMediaContainer::generateMediaWidget(const QString& url)
if(mimeType.contains("image")){
QPixmap pix = QPixmap(url);
UBPictureWidget* pic = new UBPictureWidget();
+ pic->setUrl(url);
pix.scaledToWidth(pic->label()->width());
pic->label()->resize(pix.width(), pix.height());
pic->label()->setPixmap(pix);
@@ -470,6 +495,7 @@ QWidget* UBTBMediaContainer::generateMediaWidget(const QString& url)
else if(mimeType.contains("video") || mimeType.contains("audio")){
UBMediaWidget* mediaPlayer = new UBMediaWidget(mimeType.contains("audio")?eMediaType_Audio:eMediaType_Video);
mediaPlayer->setFile(url);
+ mediaPlayer->setUrl(url);
pW = mediaPlayer;
}
else{
@@ -511,11 +537,12 @@ UBTeacherStudentAction::UBTeacherStudentAction(QWidget *parent, const char *name
mpText->setStyleSheet("background:white;");
mpLayout->addWidget(mpText, 1);
-
+ setActionsParent(this);
}
UBTeacherStudentAction::~UBTeacherStudentAction()
{
+ unsetActionsParent();
DELETEPTR(mpCombo);
DELETEPTR(mpText);
DELETEPTR(mpComboLayout);
@@ -568,10 +595,12 @@ UBPictureWidget::UBPictureWidget(QWidget *parent, const char *name):UBActionable
mpLabel = new QLabel(this);
mpLayout->addWidget(mpLabel);
mpLabel->setGeometry( 10, 10, width()-2*10, height());
+ setActionsParent(mpLabel);
}
UBPictureWidget::~UBPictureWidget()
{
+ unsetActionsParent();
DELETEPTR(mpLabel);
DELETEPTR(mpLayout);
}
diff --git a/src/gui/UBTBPageEditWidget.h b/src/gui/UBTBPageEditWidget.h
index 0521c847..64d28473 100644
--- a/src/gui/UBTBPageEditWidget.h
+++ b/src/gui/UBTBPageEditWidget.h
@@ -64,6 +64,8 @@ public:
~UBPictureWidget();
QLabel* label(){return mpLabel;}
+ void setUrl(const QString& url){mUrl = url;}
+ QString url(){return mUrl;}
protected:
void resizeEvent(QResizeEvent* ev);
@@ -71,6 +73,7 @@ protected:
private:
QVBoxLayout* mpLayout;
QLabel* mpLabel;
+ QString mUrl;
};
class UBTBMediaContainer : public UBWidgetList
@@ -124,6 +127,7 @@ private slots:
void onCloseWidget(QWidget* w);
private:
+ void connectActions(QWidget* w);
QVBoxLayout mLayout;
QHBoxLayout mTitleLayout;
QVBoxLayout mContainerLayout;
diff --git a/src/network/UBHttpGet.cpp b/src/network/UBHttpGet.cpp
index 1edb712b..5b513602 100644
--- a/src/network/UBHttpGet.cpp
+++ b/src/network/UBHttpGet.cpp
@@ -18,9 +18,12 @@
#include
#include "network/UBNetworkAccessManager.h"
+#include "core/UBDownloadManager.h"
#include "core/memcheck.h"
+sDownloadFileDesc desc;
+
UBHttpGet::UBHttpGet(QObject* parent)
: QObject(parent)
, mReply(0)
@@ -42,15 +45,14 @@ UBHttpGet::~UBHttpGet()
}
}
-
QNetworkReply* UBHttpGet::get(QUrl pUrl, QPointF pPos, QSize pSize, bool isBackground)
{
mPos = pPos;
mSize = pSize;
mIsBackground = isBackground;
- if (mReply)
- delete mReply;
+ if (mReply)
+ delete mReply;
UBNetworkAccessManager * nam = UBNetworkAccessManager::defaultAccessManager();
mReply = nam->get(QNetworkRequest(pUrl)); //mReply deleted by this destructor
@@ -63,7 +65,26 @@ QNetworkReply* UBHttpGet::get(QUrl pUrl, QPointF pPos, QSize pSize, bool isBackg
return mReply;
}
+//QNetworkReply* UBHttpGet::get(const sDownloadFileDesc &downlinfo)
+//{
+// mDownloadInfo.size = downlinfo.size;
+// mDownloadInfo.isBackground = downlinfo.isBackground;
+// mDownloadInfo.pos = downlinfo.pos;
+
+// if (mReply)
+// delete mReply;
+
+// UBNetworkAccessManager * nam = UBNetworkAccessManager::defaultAccessManager();
+// mReply = nam->get(QNetworkRequest(QUrl(downlinfo.url))); //mReply deleted by this destructor
+
+// mDownloadedBytes.clear();
+
+// connect(mReply, SIGNAL(finished()), this, SLOT(requestFinished()));
+// connect(mReply, SIGNAL(readyRead()), this, SLOT(readyRead()));
+// connect(mReply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(downloadProgressed(qint64, qint64)));
+// return mReply;
+//}
void UBHttpGet::readyRead()
{
diff --git a/src/network/UBHttpGet.h b/src/network/UBHttpGet.h
index fd1eeef4..b6b4b567 100644
--- a/src/network/UBHttpGet.h
+++ b/src/network/UBHttpGet.h
@@ -18,24 +18,27 @@
#include
#include
-
+#include
class UBHttpGet : public QObject
{
- Q_OBJECT;
+ Q_OBJECT
public:
UBHttpGet(QObject* parent = 0);
virtual ~UBHttpGet();
QNetworkReply* get(QUrl pUrl, QPointF pPoint = QPointF(0, 0), QSize pSize = QSize(0, 0), bool isBackground = false);
+// QNetworkReply* get(const sDownloadFileDesc &downlinfo);
signals:
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
void downloadFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader
, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground);
+// void downloadFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData
+// , sDownloadFileDesc downlInfo);
private slots:
@@ -54,6 +57,7 @@ class UBHttpGet : public QObject
int mRequestID;
int mRedirectionCount;
bool mIsSelfAborting;
+// sDownloadFileDesc mDownloadInfo;
};
#endif /* UBHTTPGET_H_ */
diff --git a/src/pdf-merger/ASCIIHexDecode.cpp b/src/pdf-merger/ASCIIHexDecode.cpp
index 93aa990e..b35ac297 100644
--- a/src/pdf-merger/ASCIIHexDecode.cpp
+++ b/src/pdf-merger/ASCIIHexDecode.cpp
@@ -57,7 +57,7 @@ bool ASCIIHexDecode::decode(std::string & encoded)
for(int i = 0;i parents = parent->getChildrenByBounds(startOfParent, endOfParent);
if(parents.size() != 1)
@@ -50,7 +50,7 @@ namespace merge_lib
parent = parents[0];
std::string parentContent = parent->getObjectContent();
unsigned int startOfMediaBox = parentContent.find(_handlerName);
- if(startOfMediaBox == -1)
+ if((int)startOfMediaBox == -1)
{
content = parentContent;
continue;
diff --git a/src/pdf-merger/AnnotsHandler.cpp b/src/pdf-merger/AnnotsHandler.cpp
index 0b05a98c..afc86ca0 100644
--- a/src/pdf-merger/AnnotsHandler.cpp
+++ b/src/pdf-merger/AnnotsHandler.cpp
@@ -36,8 +36,8 @@ void AnnotsHandler::_processObjectContent(unsigned int startOfPageElement)
{
Object * child = _annotations[0];
std::string childContent = child->getObjectContent();
- if( Parser::findToken(childContent,"/Rect") == -1 &&
- Parser::findToken(childContent,"/Subtype") == -1 )
+ if((int) Parser::findToken(childContent,"/Rect") == -1 &&
+ (int)Parser::findToken(childContent,"/Subtype") == -1 )
{
// this was not Annotation but reference to array
// of annotations
diff --git a/src/pdf-merger/Filter.cpp b/src/pdf-merger/Filter.cpp
index 8f67bb81..f7687837 100644
--- a/src/pdf-merger/Filter.cpp
+++ b/src/pdf-merger/Filter.cpp
@@ -63,12 +63,12 @@ std::vector Filter::_getDecoders()
while(1)
{
startOfDecoder = streamHeader.find("/", startOfDecoder);
- if(startOfDecoder == -1)
+ if((int)startOfDecoder == -1)
break;
else
++startOfDecoder;
unsigned int endOfDecoder = streamHeader.find_first_of(whitespacesAndDelimeters, startOfDecoder);
- if(endOfDecoder == -1)
+ if((int)endOfDecoder == -1)
break;
std::map::iterator foundDecoder =
_allDecoders.find(streamHeader.substr(startOfDecoder, endOfDecoder - startOfDecoder));
diff --git a/src/pdf-merger/FilterPredictor.cpp b/src/pdf-merger/FilterPredictor.cpp
index b828c515..5e21f74f 100644
--- a/src/pdf-merger/FilterPredictor.cpp
+++ b/src/pdf-merger/FilterPredictor.cpp
@@ -59,14 +59,14 @@ FilterPredictor::~FilterPredictor()
std::string FilterPredictor::getDictionaryContentStr(std::string & in, size_t &pos )
{
size_t beg = in.find(DICT_START_TOKEN,pos);
- if( beg == -1 )
+ if((int) beg == -1 )
{
return "";
}
beg += DICT_START_TOKEN.size();
size_t end = in.find(DICT_END_TOKEN,beg);
- if( end == -1 )
+ if((int) end == -1 )
{
return "";
}
@@ -92,7 +92,7 @@ void FilterPredictor::obtainDecodeParams(Object *objectWithStream, std::string &
for(; it != params.end();it++)
{
size_t pos = dictStr.find((*it).first);
- if( pos != -1 )
+ if((int) pos != -1 )
{
pos += (*it).first.size();
@@ -123,7 +123,7 @@ void FilterPredictor::initialize(Object *objectWithStream)
objectWithStream->getHeader(content);
// we need to parse the header of file to obtain the decoder parameter
size_t position = content.find(DECODE_PARAM_TOKEN);
- if( position != -1)
+ if((int) position != -1)
{
position += DECODE_PARAM_TOKEN.size();
std::string dictStr = getDictionaryContentStr(content,position);
diff --git a/src/pdf-merger/FlateDecode.cpp b/src/pdf-merger/FlateDecode.cpp
index 4b9fd9ca..8d128b4b 100644
--- a/src/pdf-merger/FlateDecode.cpp
+++ b/src/pdf-merger/FlateDecode.cpp
@@ -47,7 +47,7 @@ void FlateDecode::initialize(Object * objectWithStream)
std::string head;
objectWithStream->getHeader(head);
- if( head.find(FilterPredictor::DECODE_PARAM_TOKEN) != -1 )
+ if((int) head.find(FilterPredictor::DECODE_PARAM_TOKEN) != -1 )
{
_predict = new FilterPredictor();
_predict->initialize(objectWithStream);
diff --git a/src/pdf-merger/LZWDecode.cpp b/src/pdf-merger/LZWDecode.cpp
index 0669dd7b..3b2374ab 100644
--- a/src/pdf-merger/LZWDecode.cpp
+++ b/src/pdf-merger/LZWDecode.cpp
@@ -59,7 +59,7 @@ void LZWDecode::initialize(Object * objectWithStream)
std::string head;
objectWithStream->getHeader(head);
- if( head.find(FilterPredictor::DECODE_PARAM_TOKEN) != -1 )
+ if((int) head.find(FilterPredictor::DECODE_PARAM_TOKEN) != -1 )
{
_predict = new FilterPredictor();
_predict->initialize(objectWithStream);
diff --git a/src/pdf-merger/MediaBoxElementHandler.h b/src/pdf-merger/MediaBoxElementHandler.h
index b942d4a1..5157fe46 100644
--- a/src/pdf-merger/MediaBoxElementHandler.h
+++ b/src/pdf-merger/MediaBoxElementHandler.h
@@ -59,7 +59,7 @@ namespace merge_lib
}
bool _wasCropBoxHandlerCalled()
{
- return (_page->getObjectContent().find("/BBox") != -1) ? true : false;
+ return ((int)_page->getObjectContent().find("/BBox") != -1) ? true : false;
}
};
}
diff --git a/src/pdf-merger/Object.cpp b/src/pdf-merger/Object.cpp
index b06d4361..b565ae23 100644
--- a/src/pdf-merger/Object.cpp
+++ b/src/pdf-merger/Object.cpp
@@ -369,7 +369,7 @@ bool Object::_findObject(const std::string & token, Object* & foundObject, unsig
{
_isPassed = true;
tokenPositionInContent = Parser::findToken(_content,token);
- if(tokenPositionInContent != -1)
+ if((int)tokenPositionInContent != -1)
{
foundObject = this;
return true;
@@ -456,12 +456,12 @@ bool Object::getStream(std::string & stream)
bool Object::_getStreamFromContent(std::string & stream)
{
size_t stream_begin = _content.find("stream");
- if( stream_begin == -1 )
+ if((int) stream_begin == -1 )
{
return false;
}
size_t stream_end = _content.find("endstream",stream_begin);
- if( stream_end == -1 )
+ if((int) stream_end == -1 )
{
return false;
}
@@ -558,7 +558,7 @@ std::string Object::getNameSimpleValue(const std::string &content, const std::st
Object* Object::findPatternInObjOrParents(const std::string &pattern)
{
std::string content=getObjectContent();
- if( Parser::findToken(content,pattern,0) != -1 )
+ if((int) Parser::findToken(content,pattern,0) != -1 )
{
return this;
}
@@ -569,7 +569,7 @@ Object* Object::findPatternInObjOrParents(const std::string &pattern)
{
unsigned int startOfParent = content.find("/Parent");
unsigned int endOfParent = content.find(" R", startOfParent);
- if(startOfParent == -1)
+ if((int)startOfParent == -1)
{
break;
}
@@ -581,7 +581,7 @@ Object* Object::findPatternInObjOrParents(const std::string &pattern)
parent = parents[0];
std::string parentContent = parent->getObjectContent();
unsigned int startOfPattern = parentContent.find(pattern);
- if(startOfPattern == -1)
+ if((int)startOfPattern == -1)
{
content = parentContent;
continue;
diff --git a/src/pdf-merger/Page.cpp b/src/pdf-merger/Page.cpp
index 3cb7c18b..f91e7615 100644
--- a/src/pdf-merger/Page.cpp
+++ b/src/pdf-merger/Page.cpp
@@ -167,6 +167,8 @@ void _recalculateAnnotsCoordinates(Object * annotation,
const Rectangle & outputPagesRectangle,
const MergePageDescription & description)
{
+ Q_UNUSED(outputPagesRectangle);
+ Q_UNUSED(basePagesRectangle);
std::string annotsRectangleName("/Rect");
Object * objectWithRectangle;
unsigned int fake;
@@ -193,7 +195,7 @@ static void _updateAnnotParentPage(Object *annotation,Object *newParentPage)
std::string &annotContent = annotation->getObjectContent();
size_t startOfP = Parser::findTokenName(annotContent,strP);
- if( startOfP == -1 )
+ if((int) startOfP == -1 )
{
return;
}
@@ -229,12 +231,12 @@ static void _updateAnnotParentPage(Object *annotation,Object *newParentPage)
static void _updateAnnotFormColor(Object *annotation )
{
std::string &objectContent = annotation->getObjectContent();
- if( objectContent.find("/Widget") == -1 )
+ if((int) objectContent.find("/Widget") == -1 )
{
return;
}
size_t startOfAP = Parser::findTokenName(objectContent,"/AP");
- if( startOfAP == -1 )
+ if((int) startOfAP == -1 )
{
return;
}
@@ -262,7 +264,7 @@ static void _updateAnnotFormColor(Object *annotation )
{
if( token == "f" || token == "F" )
{
- if( found != -1 )
+ if((int) found != -1 )
{
decodedStream[found] = ' ';
}
@@ -272,7 +274,7 @@ static void _updateAnnotFormColor(Object *annotation )
// Then we need to update Filter section (if any)
std::string filterStr = "/Filter";
size_t startOfFlate = Parser::findTokenName(content,filterStr);
- if( startOfFlate != -1 )
+ if((int) startOfFlate != -1 )
{
size_t endOfFlate = Parser::findEndOfElementContent(content,startOfFlate+filterStr.size());
childWithAP->eraseContent(startOfFlate,endOfFlate-startOfFlate);
@@ -285,7 +287,7 @@ static void _updateAnnotFormColor(Object *annotation )
// update the length field
std::string lengthStr = "/Length";
size_t startOfLength = Parser::findTokenName(content,lengthStr,0);
- if( startOfLength != -1 )
+ if((int) startOfLength != -1 )
{
size_t endOfLength = Parser::findEndOfElementContent(content,startOfLength + lengthStr.size());
childWithAP->eraseContent(startOfLength,endOfLength-startOfLength);
@@ -296,10 +298,10 @@ static void _updateAnnotFormColor(Object *annotation )
// update the stream of object with new content
std::string stream("stream");
size_t leftBoundOfContentStream = content.find(stream);
- if( leftBoundOfContentStream != -1 )
+ if((int) leftBoundOfContentStream != -1 )
{
size_t rightBoundOfContentStream = content.find("endstream", leftBoundOfContentStream);
- if( rightBoundOfContentStream == -1 )
+ if((int) rightBoundOfContentStream == -1 )
{
rightBoundOfContentStream = content.size() - 1;
}
@@ -323,7 +325,7 @@ static void processBasePageResources(Object *basePage)
return;
}
std::string resourceToken = "/Resources";
- if( Parser::findTokenName(basePage->getObjectContent(),resourceToken) == -1 )
+ if((int) Parser::findTokenName(basePage->getObjectContent(),resourceToken) == -1 )
{
// it seems base page does not have resources, they can be located in parent!
Object *resource = basePage->findPatternInObjOrParents(resourceToken);
@@ -331,20 +333,20 @@ static void processBasePageResources(Object *basePage)
{
std::string &resContStr = resource->getObjectContent();
size_t startOfRes = Parser::findTokenName(resContStr,resourceToken);
- if( startOfRes == -1 )
+ if((int) startOfRes == -1 )
{
// no resources at all
return;
}
size_t endOfRes = Parser::findEndOfElementContent(resContStr,startOfRes + resourceToken.size());
- if( endOfRes == -1 )
+ if((int) endOfRes == -1 )
{
return; // broken resources
}
std::string resourceContent = resContStr.substr(startOfRes,endOfRes-startOfRes);
size_t positionToInsert = basePage->getObjectContent().find("<<");
- if( positionToInsert == -1 )
+ if((int) positionToInsert == -1 )
{
positionToInsert = 0;
resourceContent.insert(0,"<<");
@@ -479,7 +481,7 @@ void Page::merge(Page * sourcePage, Document * parentDocument, MergePageDescript
rotationHandler.processObjectContent();
description.basePageTransformation.addRotation(_rotation);
- if( sourcePage->_root->getObjectContent().find("/Annots") != -1 )
+ if((int) sourcePage->_root->getObjectContent().find("/Annots") != -1 )
{
Object *crop = sourcePage->_root->findPatternInObjOrParents("/CropBox");
if( crop )
diff --git a/src/pdf-merger/PageElementHandler.cpp b/src/pdf-merger/PageElementHandler.cpp
index 462ea8b7..b14a1b2e 100644
--- a/src/pdf-merger/PageElementHandler.cpp
+++ b/src/pdf-merger/PageElementHandler.cpp
@@ -73,10 +73,10 @@ unsigned int PageElementHandler::_findEndOfElementContent(unsigned int startOfPa
static std::string whitespacesAndDelimeters(" \t\f\v\n\r<<[/");
unsigned int foundSlash = _pageContent.find("/", startOfPageElement + 1);
std::string fieldType;
- while(foundSlash != -1)
+ while((int)foundSlash != -1)
{
unsigned int foundWhitespace = _pageContent.find_first_of(whitespacesAndDelimeters, foundSlash + 1);
- if(foundWhitespace != -1)
+ if((int)foundWhitespace != -1)
fieldType = _pageContent.substr(foundSlash + 1, foundWhitespace - foundSlash - 1);
else
break;
diff --git a/src/pdf-merger/PageElementHandler.h b/src/pdf-merger/PageElementHandler.h
index c00cd93e..4bec9593 100644
--- a/src/pdf-merger/PageElementHandler.h
+++ b/src/pdf-merger/PageElementHandler.h
@@ -46,7 +46,7 @@ namespace merge_lib
void processObjectContent()
{
unsigned int startOfPageElement = _findStartOfPageElement();
- if(startOfPageElement != -1)
+ if((int)startOfPageElement != -1)
_processObjectContent(startOfPageElement);
if(_nextHandler)
_nextHandler->processObjectContent();
@@ -55,7 +55,7 @@ namespace merge_lib
void changeObjectContent()
{
unsigned int startOfPageElement = _findStartOfPageElement();
- if(startOfPageElement != -1)
+ if((int)startOfPageElement != -1)
_changeObjectContent(startOfPageElement);
else
_pageElementNotFound();
diff --git a/src/pdf-merger/Parser.cpp b/src/pdf-merger/Parser.cpp
index 18c08541..44c68b14 100644
--- a/src/pdf-merger/Parser.cpp
+++ b/src/pdf-merger/Parser.cpp
@@ -12,6 +12,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
+
+#include
#include
#include
#include
@@ -57,8 +59,8 @@ void Parser::_retrieveAllPages(Object * objectWithKids)
unsigned int startOfKids = objectContent.find("/Kids");
unsigned int endOfKids = objectContent.find("]", startOfKids);
if(
- (startOfKids == -1) &&
- (objectContent.find("/Page") != -1)
+ ((int)startOfKids == -1) &&
+ ((int)objectContent.find("/Page") != -1)
)
{
unsigned int numberOfPages = _document->_pages.size() + 1;
@@ -77,11 +79,11 @@ void Parser::_retrieveAllPages(Object * objectWithKids)
void Parser::_createDocument(const char * docName)
{
+ Q_UNUSED(docName);
_document->_root = _root;
- Object * objectWithPages = 0;
std::string & rootContent = _root->getObjectContent();
unsigned int startOfPages = rootContent.find("/Pages");
- if(startOfPages == -1)
+ if((int)startOfPages == -1)
throw Exception("Some document is wrong");
unsigned int endOfPages = rootContent.find("R", startOfPages);
std::vector objectWithKids = _root->getChildrenByBounds(startOfPages, endOfPages);
@@ -187,19 +189,19 @@ const std::map & Parser::_get
static std::map > searchResult;
searchResult.clear();
unsigned int streamStart = objectContent.find("stream");
- if(streamStart == -1)
+ if((int)streamStart == -1)
streamStart = objectContent.size();
while(startOfNextSearch < streamStart)
{
//try to find reference. reference example is 15 0 R
startOfNextSearch = objectContent.find(" R", startOfNextSearch);
currentPosition = startOfNextSearch;
- if(currentPosition != -1)
+ if((int)currentPosition != -1)
{
//check that next character of " R" is WHITESPACE.
- if((WHITESPACES.find(objectContent[currentPosition + 2]) == -1) &&
- (DELIMETERS.find(objectContent[currentPosition + 2]) == -1)
+ if(((int)WHITESPACES.find(objectContent[currentPosition + 2]) == -1) &&
+ ((int)DELIMETERS.find(objectContent[currentPosition + 2]) == -1)
)
{
//this is not reference. this is something looks like "0 0 0 RG"
@@ -257,7 +259,7 @@ const std::map & Parser::_get
unsigned int Parser::_skipNumber(const std::string & str, unsigned int currentPosition)
{
unsigned int numberSearchCounter = currentPosition;
- while((NUMBERS.find(str[numberSearchCounter]) != -1) && --numberSearchCounter)
+ while(((int)NUMBERS.find(str[numberSearchCounter]) != -1) && --numberSearchCounter)
{}
return numberSearchCounter;
@@ -281,17 +283,16 @@ void Parser::_readXRefAndCreateObjects()
//now we are reading the xref
while(1)
{
- unsigned int firstObjectNumber = Utils::stringToInt(_getNextToken(currentPostion));
+ Utils::stringToInt(_getNextToken(currentPostion));
unsigned int objectCount = Utils::stringToInt(_getNextToken(currentPostion));
for(unsigned int i(0); i < objectCount; i++)
{
unsigned long first;
- unsigned long second;
if(_countTokens(currentPostion, _getEndOfLineFromContent(currentPostion)) == 3)
{
first = Utils::stringToInt(_getNextToken(currentPostion));
- second = Utils::stringToInt(_getNextToken(currentPostion));
+ Utils::stringToInt(_getNextToken(currentPostion));
const string & use = _getNextToken(currentPostion);
if(!use.compare("n"))
{
@@ -367,10 +368,10 @@ const std::pair & Parser::_getLineBounds(const std::
{
static std::pair bounds;
bounds.first = str.rfind('\n', fromPosition);
- if(bounds.first == -1)
+ if((int)bounds.first == -1)
bounds.first = 0;
bounds.second = str.find('\n', fromPosition);
- if(bounds.second == -1)
+ if((int)bounds.second == -1)
bounds.second = str.size();
return bounds;
}
@@ -405,7 +406,7 @@ unsigned int Parser::_countTokens(unsigned int leftBound, unsigned int rightBoun
while (position < rightBount)
{
position = _fileContent.find_first_of(WHITESPACES, position);
- if (position != -1)
+ if ((int)position != -1)
++tokensCount;
//start search from next symbol
++position;
@@ -416,7 +417,7 @@ unsigned int Parser::_countTokens(unsigned int leftBound, unsigned int rightBoun
unsigned int Parser::_skipWhiteSpaces(const std::string & str, unsigned int fromPosition)
{
unsigned int position = fromPosition;
- if(WHITESPACES.find(str[0]) != -1)
+ if((int)WHITESPACES.find(str[0]) != -1)
position = str.find_first_not_of(WHITESPACES, position);
return position;
}
@@ -424,7 +425,7 @@ unsigned int Parser::_skipWhiteSpaces(const std::string & str, unsigned int from
unsigned int Parser::_skipWhiteSpacesFromContent(unsigned int fromPosition)
{
unsigned int position = fromPosition;
- if(WHITESPACES.find(_fileContent[position]) != -1)
+ if((int)WHITESPACES.find(_fileContent[position]) != -1)
position = _fileContent.find_first_not_of(WHITESPACES, position);// + 1;
return position;
@@ -453,7 +454,7 @@ const std::string & Parser::_getObjectContent(unsigned int objectPosition, unsig
static std::string objectContent;
size_t contentStart = _fileContent.find_first_not_of(Parser::WHITESPACES,currentPosition);
- if( contentStart == -1 )
+ if((int) contentStart == -1 )
{
std::stringstream strOut;
strOut<<"Wrong object "<< objectNumber<< "in PDF, cannot find content for it\n";
@@ -461,13 +462,13 @@ const std::string & Parser::_getObjectContent(unsigned int objectPosition, unsig
}
currentPosition = contentStart;
unsigned int endOfContent = _fileContent.find("endobj", contentStart);
- if( endOfContent == -1 )
+ if((int) endOfContent == -1 )
{
stringstream errorMessage("Corrupted PDF file, obj does not have matching endobj");
throw Exception(errorMessage);
}
unsigned int endOfStream = _fileContent.find("endstream", currentPosition);
- if((endOfStream != -1) && (endOfStream < endOfContent))
+ if(((int)endOfStream != -1) && (endOfStream < endOfContent))
{
std::string stream("stream");
unsigned int beginOfStream = _fileContent.find(stream, currentPosition) + stream.size();
@@ -484,7 +485,7 @@ const std::string & Parser::_getObjectContent(unsigned int objectPosition, unsig
// try to use Length field to determine end of stream.
std::string lengthToken = "/Length";
size_t lengthBegin = Parser::findTokenName(_fileContent,lengthToken,contentStart);
- if ( lengthBegin != -1 )
+ if ((int) lengthBegin != -1 )
{
std::string lengthStr;
size_t lenPos = lengthBegin + lengthToken.size();
@@ -512,7 +513,7 @@ const std::string & Parser::_getObjectContent(unsigned int objectPosition, unsig
strin>>streamEnd;
streamEnd += beginOfStream;
unsigned int streamEndBegin = _fileContent.find("endstream",streamEnd);
- if( streamEndBegin != -1 )
+ if((int) streamEndBegin != -1 )
{
endOfStream = streamEndBegin;
}
@@ -537,18 +538,18 @@ unsigned int Parser::_readTrailerAndReturnRoot()
unsigned int startOfTrailer = Parser::findToken(_fileContent,"trailer", _getStartOfXrefWithRoot());
std::string rootStr("/Root");
unsigned int startOfRoot = Parser::findToken(_fileContent,rootStr.data(), startOfTrailer);
- if( startOfRoot == -1)
+ if((int) startOfRoot == -1)
{
throw Exception("Cannot find Root object !");
}
std::string encryptStr("/Encrypt");
- if( Parser::findToken(_fileContent,encryptStr,startOfTrailer) != -1 )
+ if((int) Parser::findToken(_fileContent,encryptStr,startOfTrailer) != -1 )
{
throw Exception("Encrypted PDF is not supported!");
}
startOfRoot += rootStr.size()+1; //"/Root + ' '
unsigned int endOfRoot = startOfRoot;
- while(NUMBERS.find(_fileContent[endOfRoot++]) != -1)
+ while((int)NUMBERS.find(_fileContent[endOfRoot++]) != -1)
{}
--endOfRoot;
return Utils::stringToInt(_fileContent.substr(startOfRoot, endOfRoot - startOfRoot));
@@ -557,21 +558,21 @@ unsigned int Parser::_readTrailerAndReturnRoot()
unsigned int Parser::_readTrailerAndRterievePrev(const unsigned int startPositionForSearch, unsigned int & previosXref)
{
unsigned int startOfTrailer = Parser::findToken(_fileContent,"trailer", startPositionForSearch);
- if( startOfTrailer == -1 )
+ if((int) startOfTrailer == -1 )
{
throw Exception("Cannot find trailer!");
}
unsigned int startOfPrev = _fileContent.find("Prev ", startOfTrailer);
unsigned int startxref = _fileContent.find("startxref", startOfTrailer);
- if(startOfPrev == -1 || (startOfPrev > startxref))
+ if((int)startOfPrev == -1 || (startOfPrev > startxref))
return false;
//"Prev "s length = 5
else
startOfPrev += 5;
unsigned int endOfPrev = startOfPrev;
- while(NUMBERS.find(_fileContent[endOfPrev++]) != -1)
+ while((int)NUMBERS.find(_fileContent[endOfPrev++]) != -1)
{}
--endOfPrev;
previosXref = Utils::stringToInt(_fileContent.substr(startOfPrev, endOfPrev - startOfPrev));
@@ -589,13 +590,13 @@ std::string Parser::getNextToken(const std::string &str, unsigned int &position
}
//skip first spaces
size_t beg_pos = str.find_first_not_of(Parser::WHITESPACES,position);
- if ( beg_pos == -1 )
+ if ((int) beg_pos == -1 )
{
// it is empty string!
return "";
}
size_t end_pos = str.find_first_of(Parser::WHITESPACES_AND_DELIMETERS,beg_pos);
- if ( end_pos == -1 )
+ if ((int) end_pos == -1 )
{
end_pos = str.size();
}
@@ -623,7 +624,7 @@ bool Parser::getNextWord(std::string &out, const std::string &str, size_t &nextP
}
//skip first spaces
size_t beg_pos = str.find_first_not_of(Parser::WHITESPACES,nextPosition);
- if ( beg_pos == -1 )
+ if ((int) beg_pos == -1 )
{
// it is empty string!
return false;
@@ -634,7 +635,7 @@ bool Parser::getNextWord(std::string &out, const std::string &str, size_t &nextP
}
size_t end_pos = str.find_first_of(Parser::WHITESPACES,beg_pos);
- if ( end_pos == -1 )
+ if ((int) end_pos == -1 )
{
end_pos = str.size();
}
@@ -656,8 +657,8 @@ void Parser::trim(std::string &str)
{
std::string::size_type pos1 = str.find_first_not_of(WHITESPACES);
std::string::size_type pos2 = str.find_last_not_of(WHITESPACES);
- str = str.substr(pos1 == -1 ? 0 : pos1,
- pos2 == -1 ? str.length() - 1 : pos2 - pos1 + 1);
+ str = str.substr((int)pos1 == -1 ? 0 : pos1,
+ (int)pos2 == -1 ? str.length() - 1 : pos2 - pos1 + 1);
}
// Method tries to find the PDF token from the content
@@ -665,7 +666,7 @@ void Parser::trim(std::string &str)
std::string Parser::findTokenStr(const std::string &content, const std::string &pattern, size_t start, size_t &foundStart, size_t &foundEnd)
{
size_t cur_pos = Parser::findToken(content,pattern,start);
- if( cur_pos == -1 )
+ if((int) cur_pos == -1 )
{
return "";
}
@@ -673,7 +674,7 @@ std::string Parser::findTokenStr(const std::string &content, const std::string &
cur_pos += pattern.size();
// then lets parse the content of remaining part
size_t end_pos = content.find_first_of(Parser::DELIMETERS,cur_pos);
- if( end_pos == -1 )
+ if((int) end_pos == -1 )
{
end_pos = content.size();
}
@@ -697,7 +698,7 @@ size_t Parser::findToken(const std::string &content, const std::string &keyword,
while( 1 )
{
cur_pos = content.find(keyword,cur_pos);
- if( cur_pos == -1 )
+ if((int) cur_pos == -1 )
{
break;
}
@@ -705,8 +706,8 @@ size_t Parser::findToken(const std::string &content, const std::string &keyword,
cur_pos += keyword.size();
if( cur_pos < content.size() )
{
- if( Parser::WHITESPACES.find(content[cur_pos]) != -1 ||
- Parser::DELIMETERS.find(content[cur_pos]) != -1 )
+ if((int) Parser::WHITESPACES.find(content[cur_pos]) != -1 ||
+ (int)Parser::DELIMETERS.find(content[cur_pos]) != -1 )
{
foundStart = savedPos;
break;
@@ -736,10 +737,10 @@ bool Parser::tokenIsAName(const std::string &content, size_t start )
size_t foundNonWhite = content.find_first_not_of(Parser::WHITESPACES,start);
size_t foundDelim = content.find_first_of(Parser::DELIMETERS,start);
- if( foundNonWhite != -1 &&
- foundDelim != -1 )
+ if( (int)foundNonWhite != -1 &&
+ (int)foundDelim != -1 )
{
- if( (foundNonWhite < foundDelim ) || ( openBraces.find(content[foundDelim]) != -1) )
+ if( (foundNonWhite < foundDelim ) || ( (int)openBraces.find(content[foundDelim]) != -1) )
{
if( found )
{
@@ -784,7 +785,7 @@ size_t Parser::findTokenName(const std::string &content, const std::string &keyw
while( 1 )
{
cur_pos = content.find(keyword,cur_pos);
- if( cur_pos == -1 )
+ if((int) cur_pos == -1 )
{
break;
}
@@ -792,7 +793,7 @@ size_t Parser::findTokenName(const std::string &content, const std::string &keyw
cur_pos += keyword.size();
if( cur_pos < content.size() )
{
- if( Parser::WHITESPACES_AND_DELIMETERS.find(content[cur_pos]) != -1 )
+ if((int) Parser::WHITESPACES_AND_DELIMETERS.find(content[cur_pos]) != -1 )
{
if( tokenIsAName(content,cur_pos ) )
{
@@ -832,7 +833,7 @@ unsigned int Parser::findEndOfElementContent(const std::string &content,unsigned
unsigned int foundOpenBrace = content.find("[",curPos);
unsigned int foundOpenDict = content.find("<",curPos);
- if( foundDelimeter == -1 && foundOpenBrace == -1 && foundOpenDict == -1 )
+ if((int) foundDelimeter == -1 && (int)foundOpenBrace == -1 && (int)foundOpenDict == -1 )
{
if( !delimStack.empty() )
{
@@ -882,7 +883,7 @@ unsigned int Parser::findEndOfElementContent(const std::string &content,unsigned
if( delimStack.empty() )
{
foundEnd = content.find_first_of(delimeter,curPos);
- if( foundEnd == -1 )
+ if((int) foundEnd == -1 )
{
foundEnd = curPos;
}
diff --git a/src/pdf-merger/Rectangle.cpp b/src/pdf-merger/Rectangle.cpp
index 7fe82696..91ee22d5 100644
--- a/src/pdf-merger/Rectangle.cpp
+++ b/src/pdf-merger/Rectangle.cpp
@@ -42,14 +42,14 @@ _rectangleName(rectangleName)
{
unsigned int rectanglePosition = Parser::findToken(content,rectangleName);
- if( rectanglePosition == -1 )
+ if((int) rectanglePosition == -1 )
{
std::cerr<<"Unable to find rectangle name "<getObjectContent();
unsigned int matrixPosition = Parser::findToken(objectContent,"/Matrix");
- if(matrixPosition == -1)
+ if((int)matrixPosition == -1)
continue;
unsigned int matrixValueLeftBound = objectContent.find("[", matrixPosition);
unsigned int matrixValueRightBound = objectContent.find("]", matrixValueLeftBound) + 1;
diff --git a/src/pdf-merger/pdfMerger.pri b/src/pdf-merger/pdfMerger.pri
index d94a2c7b..b27b90c6 100644
--- a/src/pdf-merger/pdfMerger.pri
+++ b/src/pdf-merger/pdfMerger.pri
@@ -61,7 +61,6 @@ SOURCES += \
macx {
-
LIBS += -lz
}
diff --git a/src/web/UBRoutedMouseEventWebView.cpp b/src/web/UBRoutedMouseEventWebView.cpp
index e81be76c..77c3d015 100644
--- a/src/web/UBRoutedMouseEventWebView.cpp
+++ b/src/web/UBRoutedMouseEventWebView.cpp
@@ -93,3 +93,8 @@ void UBRoutedMouseEventWebView::wheelEvent(QWheelEvent* ev)
p->event(ev);
}
}
+//void UBRoutedMouseEventWebView::dropEvent(QDropEvent *event)
+//{
+//// QWebView::dropEvent(event);
+// event->accept();
+//}
diff --git a/src/web/UBRoutedMouseEventWebView.h b/src/web/UBRoutedMouseEventWebView.h
index 29aec978..3c030964 100644
--- a/src/web/UBRoutedMouseEventWebView.h
+++ b/src/web/UBRoutedMouseEventWebView.h
@@ -39,6 +39,7 @@ class UBRoutedMouseEventWebView : public QWebView
virtual void mouseReleaseEvent(QMouseEvent* ev);
virtual void contextMenuEvent(QContextMenuEvent* ev);
virtual void wheelEvent(QWheelEvent* ev);
+// virtual void dropEvent(QDropEvent *);
};
#endif /* UBROUTEDMOUSEEVENTWEBVIEW_H_ */
diff --git a/src/web/UBWebPage.cpp b/src/web/UBWebPage.cpp
index 74dde74f..56488057 100644
--- a/src/web/UBWebPage.cpp
+++ b/src/web/UBWebPage.cpp
@@ -47,8 +47,8 @@ class UBWebPluginFactory : public QWebPluginFactory
QObject* create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const
{
Q_UNUSED(url);
- Q_UNUSED(argumentNames);
- Q_UNUSED(argumentValues);
+ Q_UNUSED(argumentNames);
+ Q_UNUSED(argumentValues);
if (mimeType == "application/x-ub-pdf")
{