diff --git a/resources/library/interactivities/Cat images.wgt/js/script.js b/resources/library/interactivities/Cat images.wgt/js/script.js index 441c3ea1..ecf2d8aa 100644 --- a/resources/library/interactivities/Cat images.wgt/js/script.js +++ b/resources/library/interactivities/Cat images.wgt/js/script.js @@ -112,7 +112,7 @@ function start(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -341,7 +341,7 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -413,12 +413,11 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } - }); - checkCorrectness(imgs_container); + }); } all_imgs = $("
").appendTo(container); @@ -458,6 +457,7 @@ function importData(data){ } }); container.appendTo("#data"); + checkCorrectness(all_imgs); } } } @@ -520,7 +520,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -531,7 +531,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -561,9 +561,9 @@ function addCategory(obj){ $("").appendTo(imgs_container); $("").appendTo(imgs_container); imgs_container.attr("ondragenter", "return false;") - .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;") - .attr("ondragover", "$(this).css(\"background-color\",\"\"); return false;") - .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);"); + .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;") + .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;") + .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);"); } //add new container @@ -686,8 +686,7 @@ function returnId(){ } //a func for checking when smth will drop -function checkOnDrop(dest, source){ - dest.append(source); +function checkOnDrop(dest){ var tmp_count = dest.find("input[name='count']").val(); var tmp_mask = dest.find("input[name='mask']").val(); if(dest.find(".img_block").size() == tmp_count){ @@ -697,47 +696,35 @@ function checkOnDrop(dest, source){ tmp_right = false; }); if(tmp_right) - dest.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); + dest.removeClass("def_cont").removeClass("red_cont").addClass("green_cont"); else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } //checking source on correctness function checkCorrectness(source){ if(!source.hasClass("all_imgs")){ - var tmp_count = source.find("input[name='count']").val(); - var tmp_mask = source.find("input[name='mask']").val(); - if(source.find(".img_block").size() == tmp_count){ - var tmp_right = true; - source.find(".img_block").each(function(){ - if($(this).find("input").val() != tmp_mask) - tmp_right = false; - }); - - if(tmp_right) - source.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); - } else if(source.find(".img_block").size() == 0) - source.addClass("def_cont") - .removeClass("green_cont") - .removeClass("red_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + if(source.parent().find(".all_imgs").find(".img_block").size() == 0){ + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } + } else { + if(source.find(".img_block").size() > 0){ + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } } } diff --git a/resources/library/interactivities/Cat images.wgt/locales/fr/js/script.js b/resources/library/interactivities/Cat images.wgt/locales/fr/js/script.js index ab48d98b..aad7172e 100644 --- a/resources/library/interactivities/Cat images.wgt/locales/fr/js/script.js +++ b/resources/library/interactivities/Cat images.wgt/locales/fr/js/script.js @@ -130,7 +130,7 @@ function start(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -358,7 +358,7 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -430,7 +430,7 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -475,6 +475,7 @@ function importData(data){ } }); container.appendTo("#data"); + checkCorrectness(all_imgs); } } } @@ -537,7 +538,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -548,7 +549,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -578,9 +579,9 @@ function addCategory(obj){ $("").appendTo(imgs_container); $("").appendTo(imgs_container); imgs_container.attr("ondragenter", "return false;") - .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;") - .attr("ondragover", "$(this).css(\"background-color\",\"\"); return false;") - .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);"); + .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;") + .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;") + .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);"); } //add new container @@ -599,9 +600,9 @@ function addContainer(){ $("").appendTo(imgs_container); $("").appendTo(imgs_container); imgs_container.attr("ondragenter", "return false;") - .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;") - .attr("ondragover", "$(this).css(\"background-color\",\"\"); return false;") - .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);"); + .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;") + .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;") + .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);"); container.insertBefore($(".add_block")); } @@ -704,8 +705,7 @@ function returnId(){ } //a func for checking when smth will drop -function checkOnDrop(dest, source){ - dest.append(source); +function checkOnDrop(dest){ var tmp_count = dest.find("input[name='count']").val(); var tmp_mask = dest.find("input[name='mask']").val(); if(dest.find(".img_block").size() == tmp_count){ @@ -715,47 +715,35 @@ function checkOnDrop(dest, source){ tmp_right = false; }); if(tmp_right) - dest.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); + dest.removeClass("def_cont").removeClass("red_cont").addClass("green_cont"); else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } //checking source on correctness function checkCorrectness(source){ if(!source.hasClass("all_imgs")){ - var tmp_count = source.find("input[name='count']").val(); - var tmp_mask = source.find("input[name='mask']").val(); - if(source.find(".img_block").size() == tmp_count){ - var tmp_right = true; - source.find(".img_block").each(function(){ - if($(this).find("input").val() != tmp_mask) - tmp_right = false; - }); - - if(tmp_right) - source.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); - } else if(source.find(".img_block").size() == 0) - source.addClass("def_cont") - .removeClass("green_cont") - .removeClass("red_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + if(source.parent().find(".all_imgs").find(".img_block").size() == 0){ + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } + } else { + if(source.find(".img_block").size() > 0){ + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } } } diff --git a/resources/library/interactivities/Cat images.wgt/locales/ru/js/script.js b/resources/library/interactivities/Cat images.wgt/locales/ru/js/script.js index 367e5630..dc92f1e6 100644 --- a/resources/library/interactivities/Cat images.wgt/locales/ru/js/script.js +++ b/resources/library/interactivities/Cat images.wgt/locales/ru/js/script.js @@ -111,7 +111,7 @@ function start(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -342,7 +342,7 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -414,7 +414,7 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -459,6 +459,7 @@ function importData(data){ } }); container.appendTo("#data"); + checkCorrectness(all_imgs); } } } @@ -521,7 +522,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -532,7 +533,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -562,9 +563,9 @@ function addCategory(obj){ $("").appendTo(imgs_container); $("").appendTo(imgs_container); imgs_container.attr("ondragenter", "return false;") - .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;") - .attr("ondragover", "$(this).css(\"background-color\",\"\"); return false;") - .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);"); + .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;") + .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;") + .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);"); } //add new container @@ -583,9 +584,9 @@ function addContainer(){ $("").appendTo(imgs_container); $("").appendTo(imgs_container); imgs_container.attr("ondragenter", "return false;") - .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;") - .attr("ondragover", "$(this).css(\"background-color\",\"\"); return false;") - .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);"); + .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;") + .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;") + .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);"); container.insertBefore($(".add_block")); } @@ -688,8 +689,7 @@ function returnId(){ } //a func for checking when smth will drop -function checkOnDrop(dest, source){ - dest.append(source); +function checkOnDrop(dest){ var tmp_count = dest.find("input[name='count']").val(); var tmp_mask = dest.find("input[name='mask']").val(); if(dest.find(".img_block").size() == tmp_count){ @@ -699,47 +699,35 @@ function checkOnDrop(dest, source){ tmp_right = false; }); if(tmp_right) - dest.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); + dest.removeClass("def_cont").removeClass("red_cont").addClass("green_cont"); else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } //checking source on correctness function checkCorrectness(source){ if(!source.hasClass("all_imgs")){ - var tmp_count = source.find("input[name='count']").val(); - var tmp_mask = source.find("input[name='mask']").val(); - if(source.find(".img_block").size() == tmp_count){ - var tmp_right = true; - source.find(".img_block").each(function(){ - if($(this).find("input").val() != tmp_mask) - tmp_right = false; - }); - - if(tmp_right) - source.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); - } else if(source.find(".img_block").size() == 0) - source.addClass("def_cont") - .removeClass("green_cont") - .removeClass("red_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + if(source.parent().find(".all_imgs").find(".img_block").size() == 0){ + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } + } else { + if(source.find(".img_block").size() > 0){ + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } } } diff --git a/resources/library/interactivities/Cat text.wgt/js/script.js b/resources/library/interactivities/Cat text.wgt/js/script.js index 12653ac4..0dededfa 100644 --- a/resources/library/interactivities/Cat text.wgt/js/script.js +++ b/resources/library/interactivities/Cat text.wgt/js/script.js @@ -120,7 +120,7 @@ function start(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -339,7 +339,7 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -410,12 +410,11 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } - }); - checkCorrectness(imgs_container); + }); } all_imgs = $("
").appendTo(container); @@ -452,7 +451,8 @@ function importData(data){ } } } - }); + }); + checkCorrectness(all_imgs); } } } @@ -516,7 +516,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -527,7 +527,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -685,8 +685,7 @@ function changeStyle(val){ } //a func for checking when smth will drop -function checkOnDrop(dest, source){ - dest.append(source); +function checkOnDrop(dest){ var tmp_count = dest.find("input[name='count']").val(); var tmp_mask = dest.find("input[name='mask']").val(); if(dest.find(".img_block").size() == tmp_count){ @@ -696,46 +695,34 @@ function checkOnDrop(dest, source){ tmp_right = false; }); if(tmp_right) - dest.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); + dest.removeClass("def_cont").removeClass("red_cont").addClass("green_cont"); else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } //checking source on correctness function checkCorrectness(source){ if(!source.hasClass("all_imgs")){ - var tmp_count = source.find("input[name='count']").val(); - var tmp_mask = source.find("input[name='mask']").val(); - if(source.find(".img_block").size() == tmp_count){ - var tmp_right = true; - source.find(".img_block").each(function(){ - if($(this).find("input").val() != tmp_mask) - tmp_right = false; - }); - - if(tmp_right) - source.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); - } else if(source.find(".img_block").size() == 0) - source.addClass("def_cont") - .removeClass("green_cont") - .removeClass("red_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + if(source.parent().find(".all_imgs").find(".img_block").size() == 0){ + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } + } else { + if(source.find(".img_block").size() > 0){ + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } } } diff --git a/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js b/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js index 8d7149ed..606f4a4a 100644 --- a/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js +++ b/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js @@ -141,7 +141,7 @@ function start(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -360,7 +360,7 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -431,7 +431,7 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -473,7 +473,8 @@ function importData(data){ } } } - }); + }); + checkCorrectness(all_imgs); } } } @@ -537,7 +538,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -548,7 +549,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -706,8 +707,7 @@ function changeStyle(val){ } //a func for checking when smth will drop -function checkOnDrop(dest, source){ - dest.append(source); +function checkOnDrop(dest){ var tmp_count = dest.find("input[name='count']").val(); var tmp_mask = dest.find("input[name='mask']").val(); if(dest.find(".img_block").size() == tmp_count){ @@ -717,46 +717,34 @@ function checkOnDrop(dest, source){ tmp_right = false; }); if(tmp_right) - dest.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); + dest.removeClass("def_cont").removeClass("red_cont").addClass("green_cont"); else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } //checking source on correctness function checkCorrectness(source){ if(!source.hasClass("all_imgs")){ - var tmp_count = source.find("input[name='count']").val(); - var tmp_mask = source.find("input[name='mask']").val(); - if(source.find(".img_block").size() == tmp_count){ - var tmp_right = true; - source.find(".img_block").each(function(){ - if($(this).find("input").val() != tmp_mask) - tmp_right = false; - }); - - if(tmp_right) - source.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); - } else if(source.find(".img_block").size() == 0) - source.addClass("def_cont") - .removeClass("green_cont") - .removeClass("red_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + if(source.parent().find(".all_imgs").find(".img_block").size() == 0){ + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } + } else { + if(source.find(".img_block").size() > 0){ + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } } } diff --git a/resources/library/interactivities/Cat text.wgt/locales/ru/js/script.js b/resources/library/interactivities/Cat text.wgt/locales/ru/js/script.js index dade5268..86bef6bd 100644 --- a/resources/library/interactivities/Cat text.wgt/locales/ru/js/script.js +++ b/resources/library/interactivities/Cat text.wgt/locales/ru/js/script.js @@ -120,7 +120,7 @@ function start(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -339,7 +339,7 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -410,7 +410,7 @@ function importData(data){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -452,7 +452,8 @@ function importData(data){ } } } - }); + }); + checkCorrectness(all_imgs); } } } @@ -516,7 +517,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -527,7 +528,7 @@ function showExample(){ drop: function(event, ui) { if($(ui.draggable).parent().parent().html() == $(this).parent().html()){ var tmp_ui = $(ui.draggable).parent(); - checkOnDrop($(this), $(ui.draggable)); + $(this).append($(ui.draggable)); checkCorrectness(tmp_ui); } } @@ -685,8 +686,7 @@ function changeStyle(val){ } //a func for checking when smth will drop -function checkOnDrop(dest, source){ - dest.append(source); +function checkOnDrop(dest){ var tmp_count = dest.find("input[name='count']").val(); var tmp_mask = dest.find("input[name='mask']").val(); if(dest.find(".img_block").size() == tmp_count){ @@ -696,46 +696,34 @@ function checkOnDrop(dest, source){ tmp_right = false; }); if(tmp_right) - dest.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); + dest.removeClass("def_cont").removeClass("red_cont").addClass("green_cont"); else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } else - dest.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont"); } //checking source on correctness function checkCorrectness(source){ if(!source.hasClass("all_imgs")){ - var tmp_count = source.find("input[name='count']").val(); - var tmp_mask = source.find("input[name='mask']").val(); - if(source.find(".img_block").size() == tmp_count){ - var tmp_right = true; - source.find(".img_block").each(function(){ - if($(this).find("input").val() != tmp_mask) - tmp_right = false; - }); - - if(tmp_right) - source.removeClass("def_cont") - .removeClass("red_cont") - .addClass("green_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); - } else if(source.find(".img_block").size() == 0) - source.addClass("def_cont") - .removeClass("green_cont") - .removeClass("red_cont"); - else - source.removeClass("def_cont") - .removeClass("green_cont") - .addClass("red_cont"); + if(source.parent().find(".all_imgs").find(".img_block").size() == 0){ + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } + } else { + if(source.find(".img_block").size() > 0){ + source.parent().find(".imgs_cont").each(function(){ + $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont"); + }) + } else { + source.parent().find(".imgs_cont").each(function(){ + checkOnDrop($(this)) + }) + } } } \ No newline at end of file diff --git a/src/adaptors/UBSvgSubsetAdaptor.cpp b/src/adaptors/UBSvgSubsetAdaptor.cpp index 03a62143..cabc74ad 100644 --- a/src/adaptors/UBSvgSubsetAdaptor.cpp +++ b/src/adaptors/UBSvgSubsetAdaptor.cpp @@ -3090,7 +3090,7 @@ UBGraphicsTriangle* UBSvgSubsetAdaptor::UBSvgSubsetReader::triangleFromSvg() UBGraphicsCache* UBSvgSubsetAdaptor::UBSvgSubsetReader::cacheFromSvg() { - UBGraphicsCache* pCache = new UBGraphicsCache(); + UBGraphicsCache* pCache = UBGraphicsCache::instance(mScene); pCache->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool)); graphicsItemFromSvg(pCache); diff --git a/src/api/UBLibraryAPI.cpp b/src/api/UBLibraryAPI.cpp index 8d75a568..073ed404 100644 --- a/src/api/UBLibraryAPI.cpp +++ b/src/api/UBLibraryAPI.cpp @@ -40,7 +40,7 @@ UBLibraryAPI::~UBLibraryAPI() void UBLibraryAPI::addObject(QString pUrl, int width, int height, int x, int y, bool background) { if (UBApplication::boardController) - UBApplication::boardController->downloadURL(QUrl(pUrl), QPointF(x, y), QSize(width, height), background); + UBApplication::boardController->downloadURL(QUrl(pUrl), QString(), QPointF(x, y), QSize(width, height), background); } diff --git a/src/api/UBWidgetUniboardAPI.cpp b/src/api/UBWidgetUniboardAPI.cpp index b86e7aa1..32c62f32 100644 --- a/src/api/UBWidgetUniboardAPI.cpp +++ b/src/api/UBWidgetUniboardAPI.cpp @@ -201,7 +201,7 @@ void UBWidgetUniboardAPI::addObject(QString pUrl, int width, int height, int x, if (UBApplication::boardController->activeScene() != mScene) return; - UBApplication::boardController->downloadURL(QUrl(pUrl), QPointF(x, y), QSize(width, height), background); + UBApplication::boardController->downloadURL(QUrl(pUrl), QString(), QPointF(x, y), QSize(width, height), background); } @@ -506,7 +506,7 @@ void UBWidgetUniboardAPI::ProcessDropEvent(QGraphicsSceneDragDropEvent *event) sDownloadFileDesc desc; desc.dest = sDownloadFileDesc::graphicsWidget; desc.modal = true; - desc.url = url; + desc.srcUrl = url; desc.currentSize = 0; desc.name = QFileInfo(url).fileName(); desc.totalSize = 0; // The total size will be retrieved during the download diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 949a5b97..b269b8fa 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -132,7 +132,7 @@ void UBBoardController::init() , this, SLOT(lastWindowClosed())); connect(UBDownloadManager::downloadManager(), SIGNAL(downloadModalFinished()), this, SLOT(onDownloadModalFinished())); - connect(UBDownloadManager::downloadManager(), SIGNAL(addDownloadedFileToBoard(bool,QUrl,QString,QByteArray,QPointF,QSize,bool)), this, SLOT(downloadFinished(bool,QUrl,QString,QByteArray,QPointF,QSize,bool))); + connect(UBDownloadManager::downloadManager(), SIGNAL(addDownloadedFileToBoard(bool,QUrl,QUrl,QString,QByteArray,QPointF,QSize,bool)), this, SLOT(downloadFinished(bool,QUrl,QUrl,QString,QByteArray,QPointF,QSize,bool))); UBDocumentProxy* doc = UBPersistenceManager::persistenceManager()->createDocument(); @@ -563,7 +563,12 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item) } UBMimeType::Enum itemMimeType; - QString contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(item->sourceUrl().toLocalFile()); + + QString srcFile = item->sourceUrl().toLocalFile(); + if (srcFile.isEmpty()) + srcFile = item->sourceUrl().toString(); + + QString contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(srcFile); if(NULL != qgraphicsitem_cast(commonItem)) itemMimeType = UBMimeType::Group; else @@ -588,8 +593,9 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item) if (mitem) { sourceUrl = mitem->mediaFileUrl(); + downloadURL(sourceUrl, srcFile, itemPos, QSize(itemSize.width(), itemSize.height()), false, false); } - }break; + }return NULL; // async operation case UBMimeType::VectorImage: { @@ -662,7 +668,7 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item) if (retItem) return retItem; - UBItem *createdItem = downloadFinished(true, sourceUrl, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()), false); + UBItem *createdItem = downloadFinished(true, sourceUrl, sourceUrl, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()), false); if (createdItem) { createdItem->setSourceUrl(item->sourceUrl()); @@ -676,6 +682,7 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item) retItem = dynamic_cast(createdItem); } + return retItem; } @@ -961,7 +968,7 @@ void UBBoardController::groupButtonClicked() } } -void UBBoardController::downloadURL(const QUrl& url, const QPointF& pPos, const QSize& pSize, bool isBackground, bool internalData) +void UBBoardController::downloadURL(const QUrl& url, QString contentSourceUrl, const QPointF& pPos, const QSize& pSize, bool isBackground, bool internalData) { qDebug() << "something has been dropped on the board! Url is: " << url.toString(); QString sUrl = url.toString(); @@ -972,7 +979,7 @@ void UBBoardController::downloadURL(const QUrl& url, const QPointF& pPos, const if(sUrl.startsWith("uniboardTool://")) { - downloadFinished(true, url, "application/vnd.mnemis-uniboard-tool", QByteArray(), pPos, pSize, isBackground); + downloadFinished(true, url, QUrl(), "application/vnd.mnemis-uniboard-tool", QByteArray(), pPos, pSize, isBackground); } else if (sUrl.startsWith("file://") || sUrl.startsWith("/")) { @@ -985,22 +992,37 @@ void UBBoardController::downloadURL(const QUrl& url, const QPointF& pPos, const || contentType.startsWith("application/widget") || contentType.startsWith("application/vnd.apple-widget"); - QFile file(fileName); - if (shouldLoadFileData) + { + QFile file(fileName); file.open(QIODevice::ReadOnly); - - downloadFinished(true, formedUrl, contentType, file.readAll(), pPos, pSize, isBackground, internalData); - - if (shouldLoadFileData) + downloadFinished(true, formedUrl, QUrl(), contentType, file.readAll(), pPos, pSize, isBackground, internalData); file.close(); + } + else + { + // media items should be copyed in separate thread + + sDownloadFileDesc desc; + desc.modal = false; + desc.srcUrl = sUrl; + desc.originalSrcUrl = contentSourceUrl; + desc.currentSize = 0; + desc.name = QFileInfo(url.toString()).fileName(); + desc.totalSize = 0; // The total size will be retrieved during the download + desc.pos = pPos; + desc.size = pSize; + desc.isBackground = isBackground; + + UBDownloadManager::downloadManager()->addFileToDownload(desc); + } } else { // When we fall there, it means that we are dropping something from the web to the board sDownloadFileDesc desc; desc.modal = true; - desc.url = url.toString(); + desc.srcUrl = url.toString(); desc.currentSize = 0; desc.name = QFileInfo(url.toString()).fileName(); desc.totalSize = 0; // The total size will be retrieved during the download @@ -1023,7 +1045,7 @@ void UBBoardController::downloadURL(const QUrl& url, const QPointF& pPos, const } -UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, +UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground, bool internalData) { @@ -1158,11 +1180,9 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri qDebug() << "accepting mime type" << mimeType << "as video"; UBGraphicsMediaItem *mediaVideoItem = 0; - + QUuid uuid = QUuid::createUuid(); if (pData.length() > 0) { - QUuid uuid = QUuid::createUuid(); - QString destFile; bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(), sourceUrl.toString(), @@ -1179,16 +1199,19 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri QUrl url = QUrl::fromLocalFile(destFile); mediaVideoItem = mActiveScene->addMedia(url, false, pPos); - - mediaVideoItem->setSourceUrl(sourceUrl); - mediaVideoItem->setUuid(uuid); } else { - mediaVideoItem = addVideo(sourceUrl, false, pPos); + qDebug() << sourceUrl.toString(); + mediaVideoItem = addVideo(sourceUrl, false, pPos, true); } if(mediaVideoItem){ + if (contentUrl.isEmpty()) + mediaVideoItem->setSourceUrl(sourceUrl); + else + mediaVideoItem->setSourceUrl(contentUrl); + mediaVideoItem->setUuid(uuid); connect(this, SIGNAL(activeSceneChanged()), mediaVideoItem, SLOT(activeSceneChanged())); } @@ -1202,10 +1225,9 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri UBGraphicsMediaItem *audioMediaItem = 0; + QUuid uuid = QUuid::createUuid(); if (pData.length() > 0) { - QUuid uuid = QUuid::createUuid(); - QString destFile; bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(), sourceUrl.toString(), @@ -1222,16 +1244,18 @@ UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QStri QUrl url = QUrl::fromLocalFile(destFile); audioMediaItem = mActiveScene->addMedia(url, false, pPos); - - audioMediaItem->setSourceUrl(sourceUrl); - audioMediaItem->setUuid(uuid); } else { - audioMediaItem = addAudio(sourceUrl, false, pPos); + audioMediaItem = addAudio(sourceUrl, false, pPos, true); } if(audioMediaItem){ + if (contentUrl.isEmpty()) + audioMediaItem->setSourceUrl(sourceUrl); + else + audioMediaItem->setSourceUrl(contentUrl); + audioMediaItem->setUuid(uuid); connect(this, SIGNAL(activeSceneChanged()), audioMediaItem, SLOT(activeSceneChanged())); } @@ -2027,23 +2051,28 @@ void UBBoardController::grabScene(const QRectF& pSceneRect) } } -UBGraphicsMediaItem* UBBoardController::addVideo(const QUrl& pSourceUrl, bool startPlay, const QPointF& pos) +UBGraphicsMediaItem* UBBoardController::addVideo(const QUrl& pSourceUrl, bool startPlay, const QPointF& pos, bool bUseSource) { QUuid uuid = QUuid::createUuid(); QUrl concreteUrl = pSourceUrl; - QString destFile; - bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(), - pSourceUrl.toLocalFile(), - UBPersistenceManager::videoDirectory, - uuid, - destFile); - if (!b) + // media file is not in document folder yet + if (!bUseSource) { - showMessage(tr("Add file operation failed: file copying error")); - return NULL; - } - concreteUrl = QUrl::fromLocalFile(destFile); + QString destFile; + bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(), + pSourceUrl.toLocalFile(), + UBPersistenceManager::videoDirectory, + uuid, + destFile); + if (!b) + { + showMessage(tr("Add file operation failed: file copying error")); + return NULL; + } + concreteUrl = QUrl::fromLocalFile(destFile); + }// else we just use source Url. + UBGraphicsMediaItem* vi = mActiveScene->addMedia(concreteUrl, startPlay, pos); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); @@ -2057,23 +2086,27 @@ UBGraphicsMediaItem* UBBoardController::addVideo(const QUrl& pSourceUrl, bool st } -UBGraphicsMediaItem* UBBoardController::addAudio(const QUrl& pSourceUrl, bool startPlay, const QPointF& pos) +UBGraphicsMediaItem* UBBoardController::addAudio(const QUrl& pSourceUrl, bool startPlay, const QPointF& pos, bool bUseSource) { QUuid uuid = QUuid::createUuid(); QUrl concreteUrl = pSourceUrl; - QString destFile; - bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(), - pSourceUrl.toLocalFile(), - UBPersistenceManager::audioDirectory, - uuid, - destFile); - if (!b) + // media file is not in document folder yet + if (!bUseSource) { - showMessage(tr("Add file operation failed: file copying error")); - return NULL; - } - concreteUrl = QUrl::fromLocalFile(destFile); + QString destFile; + bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(), + pSourceUrl.toLocalFile(), + UBPersistenceManager::audioDirectory, + uuid, + destFile); + if (!b) + { + showMessage(tr("Add file operation failed: file copying error")); + return NULL; + } + concreteUrl = QUrl::fromLocalFile(destFile); + }// else we just use source Url. UBGraphicsMediaItem* ai = mActiveScene->addMedia(concreteUrl, startPlay, pos); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); @@ -2247,7 +2280,7 @@ void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPoint if("" != url) { - downloadURL(url, pPos); + downloadURL(url, QString(), pPos); return; } } @@ -2267,7 +2300,7 @@ void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPoint foreach(const QUrl url, urls){ QPointF pos(pPos + QPointF(index * 15, index * 15)); - downloadURL(url, pos, QSize(), false, internalData); + downloadURL(url, QString(), pos, QSize(), false, internalData); index++; } @@ -2293,7 +2326,7 @@ void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPoint // Sometimes, it is possible to have an URL as text. we check here if it is the case QString qsTmp = pMimeData->text().remove(QRegExp("[\\0]")); if(qsTmp.startsWith("http")){ - downloadURL(QUrl(qsTmp), pPos); + downloadURL(QUrl(qsTmp), QString(), pPos); } else{ mActiveScene->addTextHtml(pMimeData->html(), pPos); @@ -2307,7 +2340,7 @@ void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPoint QString qsUrl = UBPlatformUtils::urlFromClipboard(); if("" != qsUrl){ // We finally got the url of the dropped ressource! Let's import it! - downloadURL(qsUrl, pPos); + downloadURL(qsUrl, qsUrl, pPos); return; } #endif diff --git a/src/board/UBBoardController.h b/src/board/UBBoardController.h index 9d810811..d7f44e37 100644 --- a/src/board/UBBoardController.h +++ b/src/board/UBBoardController.h @@ -193,8 +193,8 @@ class UBBoardController : public UBDocumentContainer void firstScene(); void lastScene(); void groupButtonClicked(); - void downloadURL(const QUrl& url, const QPointF& pPos = QPointF(0.0, 0.0), const QSize& pSize = QSize(), bool isBackground = false, bool internalData = false); - UBItem *downloadFinished(bool pSuccess, QUrl sourceUrl, QString pHeader, + void downloadURL(const QUrl& url, QString contentSourceUrl = QString(), const QPointF& pPos = QPointF(0.0, 0.0), const QSize& pSize = QSize(), bool isBackground = false, bool internalData = false); + UBItem *downloadFinished(bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground = false, bool internalData = false); void changeBackground(bool isDark, bool isCrossed); @@ -210,8 +210,8 @@ class UBBoardController : public UBDocumentContainer void setRegularPageSize(bool checked); void stylusToolChanged(int tool); void grabScene(const QRectF& pSceneRect); - UBGraphicsMediaItem* addVideo(const QUrl& pUrl, bool startPlay, const QPointF& pos); - UBGraphicsMediaItem* addAudio(const QUrl& pUrl, bool startPlay, const QPointF& pos); + UBGraphicsMediaItem* addVideo(const QUrl& pUrl, bool startPlay, const QPointF& pos, bool bUseSource = false); + UBGraphicsMediaItem* addAudio(const QUrl& pUrl, bool startPlay, const QPointF& pos, bool bUseSource = false); UBGraphicsWidgetItem *addW3cWidget(const QUrl& pUrl, const QPointF& pos); void cut(); diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index 2652bb15..612813cd 100644 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -995,6 +995,7 @@ void UBBoardPaletteManager::startDownloads() mDownloadInProgress = true; mpDownloadWidget->setVisibleState(true); mRightPalette->addTab(mpDownloadWidget); + mpDownloadWidget; } } diff --git a/src/board/UBFeaturesController.cpp b/src/board/UBFeaturesController.cpp index a9bbeb08..049ee301 100644 --- a/src/board/UBFeaturesController.cpp +++ b/src/board/UBFeaturesController.cpp @@ -711,7 +711,7 @@ void UBFeaturesController::addItemToPage(const UBFeature &item) void UBFeaturesController::addItemAsBackground(const UBFeature &item) { - UBApplication::boardController->downloadURL( item.getFullPath(), QPointF(), QSize(), true ); + UBApplication::boardController->downloadURL( item.getFullPath(), QString(), QPointF(), QSize(), true ); } UBFeature UBFeaturesController::getDestinationFeatureForUrl( const QUrl &url ) diff --git a/src/core/UBDownloadManager.cpp b/src/core/UBDownloadManager.cpp index 4127851f..e120038a 100644 --- a/src/core/UBDownloadManager.cpp +++ b/src/core/UBDownloadManager.cpp @@ -14,12 +14,79 @@ */ #include "UBDownloadManager.h" #include "core/UBApplication.h" +#include "core/UBPersistenceManager.h" #include "gui/UBMainWindow.h" #include "board/UBBoardController.h" #include "board/UBBoardPaletteManager.h" +#include "frameworks/UBFileSystemUtils.h" #include "core/memcheck.h" + +UBAsyncLocalFileDownloader::UBAsyncLocalFileDownloader(sDownloadFileDesc desc, QObject *parent) +: QThread(parent) +, mDesc(desc) +, m_bAborting(false) +{ + +} + +UBAsyncLocalFileDownloader *UBAsyncLocalFileDownloader::download() +{ + if (!QFile::exists(QUrl(mDesc.srcUrl).toLocalFile())) { + qDebug() << "file" << mDesc.srcUrl << "does not present in fs"; + return this; + } + + start(); + + return this; +} + +void UBAsyncLocalFileDownloader::run() +{ + + QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(mDesc.srcUrl); + + int position=mimeType.indexOf(";"); + if(position != -1) + mimeType=mimeType.left(position); + + UBMimeType::Enum itemMimeType = UBFileSystemUtils::mimeTypeFromString(mimeType); + + + QString destDirectory; + if (UBMimeType::Video == itemMimeType) + destDirectory = UBPersistenceManager::videoDirectory; + else + if (UBMimeType::Audio == itemMimeType) + destDirectory = UBPersistenceManager::audioDirectory; + + if (mDesc.originalSrcUrl.isEmpty()) + mDesc.originalSrcUrl = mDesc.srcUrl; + + QString uuid = QUuid::createUuid(); + UBPersistenceManager::persistenceManager()->addFileToDocument(UBApplication::boardController->selectedDocument(), + QUrl(mDesc.srcUrl).toLocalFile(), + destDirectory, + uuid, + mTo, + NULL); + + if (m_bAborting) + { + if (QFile::exists(mTo)) + QFile::remove(mTo); + } + else + emit signal_asyncCopyFinished(mDesc.id, !mTo.isEmpty(), QUrl::fromLocalFile(mTo), QUrl::fromLocalFile(mDesc.originalSrcUrl), "", NULL, mDesc.pos, mDesc.size, mDesc.isBackground); +} + +void UBAsyncLocalFileDownloader::abort() +{ + m_bAborting = true; +} + /** The unique instance of the download manager */ static UBDownloadManager* pInstance = NULL; @@ -100,7 +167,7 @@ void UBDownloadManager::init() { mCrntDL.clear(); mPendingDL.clear(); - mReplies.clear(); + mDownloads.clear(); mLastID = 1; mDLAvailability.clear(); for(int i=0; iget(url, desc.pos, desc.size, desc.isBackground); + if (desc.srcUrl.startsWith("file://") || desc.srcUrl.startsWith("/")) + { + UBAsyncLocalFileDownloader * cpHelper = new UBAsyncLocalFileDownloader(desc, this); + connect(cpHelper, SIGNAL(signal_asyncCopyFinished(int, bool, QUrl, QUrl, QString, QByteArray, QPointF, QSize, bool)), this, SLOT(onDownloadFinished(int, bool, QUrl, QUrl,QString, QByteArray, QPointF, QSize, bool))); + QObject *res = dynamic_cast(cpHelper->download()); + if (!res) + delete res; + else + mDownloads[desc.id] = res; + } + else + { + UBDownloadHttpFile* http = new UBDownloadHttpFile(desc.id, this); + connect(http, SIGNAL(downloadProgress(int, qint64,qint64)), this, SLOT(onDownloadProgress(int,qint64,qint64))); + connect(http, SIGNAL(downloadFinished(int, bool, QUrl, QUrl, QString, QByteArray, QPointF, QSize, bool)), this, SLOT(onDownloadFinished(int, bool, QUrl, QUrl, QString, QByteArray, QPointF, QSize, bool))); + + //the desc.srcUrl is encoded. So we have to decode it before. + QUrl url; + url.setEncodedUrl(desc.srcUrl.toUtf8()); + // We send here the request and store its reply in order to be able to cancel it if needed + mDownloads[desc.id] = dynamic_cast(http->get(url, desc.pos, desc.size, desc.isBackground)); + } } /** @@ -356,10 +437,18 @@ void UBDownloadManager::checkIfModalRemains() void UBDownloadManager::cancelDownloads() { // Stop the current downloads - QMap::iterator it = mReplies.begin(); - for(; it!=mReplies.end();it++) + QMap::iterator it = mDownloads.begin(); + for(; it!=mDownloads.end();it++) { - dynamic_cast(it.value())->abort(); + QNetworkReply *netReply = dynamic_cast(it.value()); + if (netReply) + netReply->abort(); + else + { + UBAsyncLocalFileDownloader *localDownload = dynamic_cast(it.value()); + if (localDownload) + localDownload->abort(); + } } // Clear all the lists @@ -372,7 +461,8 @@ void UBDownloadManager::cancelDownloads() void UBDownloadManager::onDownloadError(int id) { - QNetworkReply* pReply = mReplies.value(id); + QNetworkReply *pReply = dynamic_cast(mDownloads.value(id)); + if(NULL != pReply) { // Check which error occured: @@ -402,9 +492,25 @@ void UBDownloadManager::finishDownloads(bool cancel) void UBDownloadManager::cancelDownload(int id) { + if (!mDownloads.size()) + return; + // Stop the download - mReplies[id]->abort(); - mReplies.remove(id); + + QNetworkReply *pNetworkDownload = dynamic_cast(mDownloads[id]); + if (pNetworkDownload) + pNetworkDownload->abort(); + else + { + UBAsyncLocalFileDownloader *pLocalDownload = dynamic_cast(mDownloads[id]); + if (pLocalDownload) + { + if (pLocalDownload->isRunning()) + pLocalDownload->abort(); + } + } + + mDownloads.remove(id); // Remove the canceled download from the download lists bool bFound = false; @@ -494,7 +600,7 @@ void UBDownloadHttpFile::onDownloadFinished(bool pSuccess, QUrl sourceUrl, QStri if(pSuccess) { // Notify the end of the download - emit downloadFinished(mId, pSuccess, sourceUrl, pContentTypeHeader, pData, pPos, pSize, isBackground); + emit downloadFinished(mId, pSuccess, sourceUrl, sourceUrl, pContentTypeHeader, pData, pPos, pSize, isBackground); } else { diff --git a/src/core/UBDownloadManager.h b/src/core/UBDownloadManager.h index 2b5c52c0..cefa8f40 100644 --- a/src/core/UBDownloadManager.h +++ b/src/core/UBDownloadManager.h @@ -52,7 +52,8 @@ struct sDownloadFileDesc int id; int totalSize; int currentSize; - QString url; + QString srcUrl; + QString originalSrcUrl; QString contentTypeHeader; bool modal; QPointF pos; // For board drop only @@ -75,7 +76,7 @@ public: signals: void downloadProgress(int id, qint64 current,qint64 total); - void downloadFinished(int id, bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground); + void downloadFinished(int id, bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground); void downloadError(int id); private slots: @@ -86,6 +87,28 @@ private: int mId; }; +class UBAsyncLocalFileDownloader : public QThread +{ + Q_OBJECT +public: + UBAsyncLocalFileDownloader(sDownloadFileDesc desc, QObject *parent = 0); + + UBAsyncLocalFileDownloader *download(); + void run(); + void abort(); + +signals: + void finished(QString srcUrl, QString resUrl); + void signal_asyncCopyFinished(int id, bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground); + + +private: + sDownloadFileDesc mDesc; + bool m_bAborting; + QString mFrom; + QString mTo; +}; + class UBDownloadManager : public QObject { Q_OBJECT @@ -108,7 +131,7 @@ signals: 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 addDownloadedFileToBoard(bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground); void addDownloadedFileToLibrary(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData); void cancelAllDownloads(); void allDownloadsFinished(); @@ -116,7 +139,7 @@ signals: private slots: void onUpdateDownloadLists(); void onDownloadProgress(int id, qint64 received, qint64 total); - void onDownloadFinished(int id, bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground); + void onDownloadFinished(int id, bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground); void onDownloadError(int id); private: @@ -138,7 +161,7 @@ private: /** The current download availability (-1 = free, otherwise the file ID is recorded)*/ QVector mDLAvailability; /** A map containing the replies of the GET operations */ - QMap mReplies; + QMap mDownloads; }; #endif // UBDOWNLOADMANAGER_H diff --git a/src/domain/UBGraphicsMediaItem.cpp b/src/domain/UBGraphicsMediaItem.cpp index 1faba0ce..9d3c8705 100644 --- a/src/domain/UBGraphicsMediaItem.cpp +++ b/src/domain/UBGraphicsMediaItem.cpp @@ -73,7 +73,11 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte mMediaObject = new Phonon::MediaObject(this); - if (pMediaFileUrl.toLocalFile().contains("videos")) + QString mediaPath = pMediaFileUrl.toString(); + if ("" == mediaPath) + mediaPath = pMediaFileUrl.toLocalFile(); + + if (mediaPath.toLower().contains("videos")) { mMediaType = mediaType_Video; @@ -91,7 +95,7 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte haveLinkedImage = true; } else - if (pMediaFileUrl.toLocalFile().contains("audios")) + if (mediaPath.toLower().contains("audios")) { mMediaType = mediaType_Audio; mAudioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); @@ -191,7 +195,7 @@ void UBGraphicsMediaItem::setSourceUrl(const QUrl &pSourceUrl) UBAudioPresentationWidget* pAudioWidget = dynamic_cast(mAudioWidget); if (pAudioWidget) { - pAudioWidget->setTitle(UBFileSystemUtils::lastPathComponent(pSourceUrl.toString())); + pAudioWidget->setTitle(UBFileSystemUtils::lastPathComponent(pSourceUrl.toLocalFile())); } UBItem::setSourceUrl(pSourceUrl); diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 22ff3379..1b48cbf0 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1217,6 +1217,11 @@ void UBGraphicsScene::textUndoCommandAdded(UBGraphicsTextItem *textItem) } UBGraphicsMediaItem* UBGraphicsScene::addMedia(const QUrl& pMediaFileUrl, bool shouldPlayAsap, const QPointF& pPos) { + qDebug() << pMediaFileUrl.toLocalFile(); + if (!QFile::exists(pMediaFileUrl.toLocalFile())) + if (!QFile::exists(pMediaFileUrl.toString())) + return NULL; + UBGraphicsMediaItem* mediaItem = new UBGraphicsMediaItem(pMediaFileUrl); if(mediaItem){ connect(UBApplication::boardController, SIGNAL(activeSceneChanged()), mediaItem, SLOT(activeSceneChanged())); @@ -1603,6 +1608,9 @@ void UBGraphicsScene::removeItem(QGraphicsItem* item) --mItemCount; mFastAccessItems.removeAll(item); + /* delete the item if it is cache to allow its reinstanciation, because Cache implements design pattern Singleton. */ + if (dynamic_cast(item)) + UBCoreGraphicsScene::deleteItem(item); } void UBGraphicsScene::removeItems(const QSet& items) @@ -1956,17 +1964,17 @@ void UBGraphicsScene::addAristo(QPointF center) void UBGraphicsScene::addCache() { - UBGraphicsCache* cache = new UBGraphicsCache(); - mTools << cache; - - addItem(cache); + UBGraphicsCache* cache = UBGraphicsCache::instance(this); + if (!items().contains(cache)) { + addItem(cache); - cache->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool)); + cache->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool)); - cache->setVisible(true); - cache->setSelected(true); - UBApplication::boardController->notifyCache(true); - UBApplication::boardController->notifyPageChanged(); + cache->setVisible(true); + cache->setSelected(true); + UBApplication::boardController->notifyCache(true); + UBApplication::boardController->notifyPageChanged(); + } } void UBGraphicsScene::addMask(const QPointF ¢er) diff --git a/src/frameworks/UBFileSystemUtils.cpp b/src/frameworks/UBFileSystemUtils.cpp index 36a61945..2bde7364 100644 --- a/src/frameworks/UBFileSystemUtils.cpp +++ b/src/frameworks/UBFileSystemUtils.cpp @@ -19,7 +19,6 @@ #include "core/UBApplication.h" -#include "board/UBBoardController.h" #include "document/UBDocumentContainer.h" #include "globals/UBGlobals.h" @@ -854,5 +853,4 @@ QString UBFileSystemUtils::readTextFile(QString path) } return ""; -} - +} \ No newline at end of file diff --git a/src/frameworks/UBFileSystemUtils.h b/src/frameworks/UBFileSystemUtils.h index 13c82dbf..6a0597f6 100644 --- a/src/frameworks/UBFileSystemUtils.h +++ b/src/frameworks/UBFileSystemUtils.h @@ -17,14 +17,17 @@ #define UBFILESYSTEMUTILS_H_ #include +#include #include "core/UB.h" class QuaZipFile; class UBProcessingProgressListener; -class UBFileSystemUtils +class UBFileSystemUtils : public QObject { + Q_OBJECT + public: UBFileSystemUtils(); diff --git a/src/gui/UBFeaturesWidget.cpp b/src/gui/UBFeaturesWidget.cpp index ee052027..ab965689 100644 --- a/src/gui/UBFeaturesWidget.cpp +++ b/src/gui/UBFeaturesWidget.cpp @@ -1048,8 +1048,8 @@ void UBFeatureProperties::onAddToLib() desc.modal = false; desc.name = QFileInfo( mpElement->getFullPath().toString()).fileName(); qDebug() << desc.name; - desc.url = mpElement->getFullPath().toString(); - qDebug() << desc.url; + desc.srcUrl = mpElement->getFullPath().toString(); + qDebug() << desc.srcUrl; UBDownloadManager::downloadManager()->addFileToDownload(desc); } } diff --git a/src/tools/UBGraphicsCache.cpp b/src/tools/UBGraphicsCache.cpp index 7a89c534..dfde3b4f 100644 --- a/src/tools/UBGraphicsCache.cpp +++ b/src/tools/UBGraphicsCache.cpp @@ -24,11 +24,21 @@ #include "core/memcheck.h" -UBGraphicsCache::UBGraphicsCache():QGraphicsRectItem() +QMap UBGraphicsCache::sInstances; + +UBGraphicsCache* UBGraphicsCache::instance(UBGraphicsScene *scene) +{ + if (!sInstances.contains(scene)) + sInstances.insert(scene, new UBGraphicsCache(scene)); + return sInstances[scene]; +} + +UBGraphicsCache::UBGraphicsCache(UBGraphicsScene *scene) : QGraphicsRectItem() , mMaskColor(Qt::black) , mMaskShape(eMaskShape_Circle) , mShapeWidth(100) , mDrawMask(false) + , mScene(scene) { // Get the board size and pass it to the shape QRect boardRect = UBApplication::boardController->displayView()->rect(); @@ -39,11 +49,12 @@ UBGraphicsCache::UBGraphicsCache():QGraphicsRectItem() UBGraphicsCache::~UBGraphicsCache() { + sInstances.remove(mScene); } UBItem* UBGraphicsCache::deepCopy() const { - UBGraphicsCache* copy = new UBGraphicsCache(); + UBGraphicsCache* copy = new UBGraphicsCache(mScene); copyItemParameters(copy); diff --git a/src/tools/UBGraphicsCache.h b/src/tools/UBGraphicsCache.h index 9ca07d0d..413aa352 100644 --- a/src/tools/UBGraphicsCache.h +++ b/src/tools/UBGraphicsCache.h @@ -30,7 +30,7 @@ typedef enum class UBGraphicsCache : public QGraphicsRectItem, public UBItem { public: - UBGraphicsCache(); + static UBGraphicsCache* instance(UBGraphicsScene *scene); ~UBGraphicsCache(); enum { Type = UBGraphicsItemType::cacheItemType }; @@ -55,8 +55,7 @@ protected: void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); private: - void init(); - QRectF updateRect(QPointF currentPoint); + static QMap sInstances; QColor mMaskColor; eMaskShape mMaskShape; @@ -65,6 +64,13 @@ private: QPointF mShapePos; int mOldShapeWidth; QPointF mOldShapePos; + UBGraphicsScene* mScene; + + + UBGraphicsCache(UBGraphicsScene *scene); + + void init(); + QRectF updateRect(QPointF currentPoint); }; #endif // UBGRAPHICSCACHE_H diff --git a/src/web/UBTrapFlashController.cpp b/src/web/UBTrapFlashController.cpp index 25cb37e9..6458f203 100644 --- a/src/web/UBTrapFlashController.cpp +++ b/src/web/UBTrapFlashController.cpp @@ -200,7 +200,7 @@ void UBTrapFlashController::createWidget() // flash widget UBWebKitUtils::HtmlObject selectedObject = mAvailableFlashes.at(selectedIndex - 1); UBApplication::applicationController->showBoard(); - UBApplication::boardController->downloadURL(QUrl(selectedObject.source), QPoint(0, 0), QSize(selectedObject.width, selectedObject.height)); + UBApplication::boardController->downloadURL(QUrl(selectedObject.source), QString(), QPoint(0, 0), QSize(selectedObject.width, selectedObject.height)); } QString freezedWidgetPath = UBPlatformUtils::applicationResourcesDirectory() + "/etc/freezedWidgetWrapper.html"; diff --git a/src/web/browser/WBWebTrapWebView.cpp b/src/web/browser/WBWebTrapWebView.cpp index 971ed75c..2c97626c 100644 --- a/src/web/browser/WBWebTrapWebView.cpp +++ b/src/web/browser/WBWebTrapWebView.cpp @@ -281,7 +281,7 @@ void WBWebTrapWebView::trapElementAtPos(const QPoint& pos) emit objectCaptured(QUrl(page()->currentFrame()->url().toString() + "/" + source), type, htr.boundingRect().width(), htr.boundingRect().height()); - UBApplication::boardController->downloadURL(QUrl(source), QPointF(0.0, 0.0)); + UBApplication::boardController->downloadURL(QUrl(source)); UBApplication::applicationController->showBoard(); } }