").appendTo(editContent);
- var bottomResize = $("
").appendTo(editContent);
editContent.css("top", $(domElem).position().top).css("left", $(domElem).position().left);
$(domElem).css("position","static")
.width("100%")
@@ -161,7 +167,7 @@ function init(){
}
}
});
-
+
$("#wgt_help").click(function(){
var tmp = $(this);
if($(this).hasClass("open")){
@@ -178,7 +184,7 @@ function init(){
});
$("#wgt_reload").click(function(){
- window.location.reload();
+ reloadItems();
});
$("#wgt_add").click(function(){
@@ -188,10 +194,9 @@ function init(){
$("#data").show();
});
}
- shadowDiv.show()
+ shadowDiv.show();
shadowOver = true;
- popupBack.show("slow");
-
+ popupBack.show("slow");
$(document).disableTextSelect();
});
@@ -241,7 +246,6 @@ function init(){
shadowOver = false;
$(document).enableTextSelect();
});
-
});
okButton.click(function(){
@@ -256,7 +260,6 @@ function init(){
$(document).enableTextSelect();
})
}
-
});
/* -------------- THE END OF WORK WITH POPUP BUTTONS AND FIELDS ---------------*/
@@ -271,42 +274,33 @@ function init(){
});
$(".readyTask, .editContainer").live("mousedown",function(event){
- if(!shadowOver){
- dragElement = $(this);
- coords.left = event.pageX - $(this).position().left;
- coords.top = event.pageY - $(this).position().top;
- resizeObj.width = $(this).width();
- resizeObj.height = $(this).height();
- }
- if($("#wgt_display").hasClass("selected"))
+ if($("#wgt_display").hasClass("selected")){
+ if(!shadowOver){
+ dragElement = $(this);
+ coords.left = event.pageX - $(this).position().left;
+ coords.top = event.pageY - $(this).position().top;
+ resizeObj.width = $(this).width();
+ resizeObj.height = $(this).height();
+ }
$(document).disableTextSelect();
- });
-
- $(".rightResize").live("mousedown",function(event){
- if(!shadowOver){
- resizeObj.x = true;
- }
- });
-
- $(".bottomResize").live("mousedown",function(event){
- if(!shadowOver){
- resizeObj.y = true;
}
});
$("body").mouseup(function(event){
- if(!shadowOver){
- if (dragElement) {
- exportToSankore();
+ if($("#wgt_display").hasClass("selected")){
+ if(!shadowOver){
+ if (dragElement) {
+ exportToSankore();
+ }
+ dragElement = null;
+ resizeObj.x = false;
+ resizeObj.y = false;
}
- dragElement = null;
- resizeObj.x = false;
- resizeObj.y = false;
}
});
$("body").mousemove(function(event){
- if(dragElement && !shadowOver){
+ if(dragElement && !shadowOver && $("#wgt_display").hasClass("selected")){
var top = event.pageY - coords.top;
var left = event.pageX - coords.left;
var bottom = top + dragElement.height();
@@ -335,6 +329,36 @@ function init(){
}
});
+ $(".taskContainer").live("keyup", function(){
+ if($(".editContainer").size() > 1){
+ var prev = $(".editContainer:first"),
+ prevBottom = prev.position().top + prev.height(),
+ prevLeft = prev.position().left;
+ recursionCall(prevBottom, prevLeft, prev.next());
+ }
+ })
+
+ function recursionCall(prevBottom, prevLeft, curr){
+ var curTop = curr.position().top,
+ curHeight = curr.height(),
+ curLeft = curr.position().left;
+ if(prevLeft == curLeft){
+ if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
+ curr.css("top", prevBottom + 15 + "px");
+ else
+ curr.css("top", "60px").css("left", prevLeft + 255 + "px");
+ } else {
+ if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
+ curr.css("top", prevBottom + 15 + "px").css("left", prevLeft + "px");
+ else
+ curr.css("top", "60px");
+ }
+ prevBottom = curr.position().top + curr.height(),
+ prevLeft = curr.position().left;
+ if(curr.next().length)
+ recursionCall(prevBottom, prevLeft, curr.next());
+ }
+
//$("#leftDiv,#rightDiv,#shadowDiv").css("height", $(window).height());
popupBack.css("top", ($(window).height() - 138)*50/$(window).height() + "%");
popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%");
@@ -347,7 +371,7 @@ function init(){
if (window.widget) {
window.widget.onleave = function(){
- //exportToSankore();
+ exportToSankore();
sankore.setPreference("by_style", $(".style_select").find("option:selected").val());
}
}
@@ -397,7 +421,8 @@ function init(){
});
}
}
- sankore.setPreference("blackYellowData", JSON.stringify(arrayToExport));
+ if(window.sankore)
+ sankore.setPreference("blackYellowData", JSON.stringify(arrayToExport));
}
}
@@ -412,18 +437,70 @@ function checkEmptyFields(field){
}
}
+//reload
+function reloadItems(){
+ if($("#wgt_edit").hasClass("selected"))
+ $("#wgt_display").trigger("click");
+ else{
+ var tmp_array = [];
+ $(".readyTask").each(function(){
+ tmp_array.push($(this));
+ });
+ tmp_array = shuffle(tmp_array);
+ orderItems(tmp_array);
+ }
+
+}
+
+//order items
+function orderItems(items){
+ var bottom = 45,
+ lastItemLeft = 54;
+ for (var i in items){
+ if((bottom + items[i].height()) < ($(window).height() - 54)){
+ items[i].css("top", bottom + 15 + "px").css("left", lastItemLeft + "px").appendTo("#data");
+ bottom += items[i].height() + 15;
+ } else {
+ bottom = 60;
+ lastItemLeft += 255;
+ items[i].css("top", bottom + "px").css("left", lastItemLeft + "px").appendTo("#data");
+ bottom += items[i].height();
+ }
+ }
+}
+
+//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;
+}
+
//adding a new task to the page
function addTask(expression, result){
var lastItem = $(".editContainer:last"),
lastItemPos = lastItem.length ? lastItem.position().top : 45,
- lastItemHeight = lastItem.length ? lastItem.height() : 0;
- var editContent = $("
").width(240).height(70).css("top", lastItemPos + lastItemHeight + 15 + "px").appendTo("#data");
- var closeItem = $("
").appendTo(editContent);
- var rightResize = $("
").appendTo(editContent);
- var bottomResize = $("
").appendTo(editContent);
+ lastItemHeight = lastItem.length ? lastItem.height() : 0,
+ lastItemLeft = lastItem.length ? lastItem.position().left : 54;
+ var bottom = lastItemPos + lastItemHeight + 85;
+ var editContent = $("
");
+ $("
").appendTo(editContent);
var main = $("
");
- var exprContainer = $("
" + expression + "
").appendTo(main);
- var resContainer = $("
"+ result + "
").appendTo(main);
+ $("
" + expression + "
").appendTo(main);
+ $("
"+ result + "
").appendTo(main);
+ if(bottom < ($(window).height() - 54)){
+ editContent.css("top", lastItemPos + lastItemHeight + 15 + "px").css("left", lastItemLeft + "px").appendTo("#data");
+ } else {
+ lastItemPos = 45;
+ editContent.css("top", lastItemPos + 15 + "px").css("left", lastItemLeft + 255 + "px").appendTo("#data");
+ }
main.appendTo(editContent);
}
diff --git a/resources/library/interactivities/Contraste.wgt/locales/ru/scripts/blackYellow.js b/resources/library/interactivities/Contraste.wgt/locales/ru/scripts/blackYellow.js
index ab7ad61a..fce0a9af 100644
--- a/resources/library/interactivities/Contraste.wgt/locales/ru/scripts/blackYellow.js
+++ b/resources/library/interactivities/Contraste.wgt/locales/ru/scripts/blackYellow.js
@@ -88,9 +88,12 @@ function init(){
/* ------------- BUTTONS -------------*/
- if(sankore.preference("by_style","")){
- changeStyle(sankore.preference("by_style",""));
- $(".style_select").val(sankore.preference("by_style",""));
+ if(window.sankore){
+ if(sankore.preference("by_style","")){
+ changeStyle(sankore.preference("by_style",""));
+ $(".style_select").val(sankore.preference("by_style",""));
+ } else
+ changeStyle("3")
} else
changeStyle("3")
@@ -106,7 +109,7 @@ function init(){
mode = false;
$(".leftDiv, .rightDiv").animate({
"opacity":"1"
- },"slow",function(){
+ },"fast",function(){
if(opacityChanged){
if($(".editContainer").size() != 0){
$(".editContainer").each(function(index, domElem){
@@ -139,14 +142,17 @@ function init(){
$(document).enableTextSelect();
$(".leftDiv, .rightDiv").animate({
"opacity":"0.4"
- },"slow",function(){
+ },"fast",function(){
if(!opacityChanged){
if($(".readyTask").size() != 0){
+ var tmp_arr = [];
+ $(".readyTask").each(function(){
+ tmp_arr.push($(this));
+ })
+ orderItems(tmp_arr);
$(".readyTask").each(function(index, domElem){
var editContent = $("
").width($(domElem).width() + 10).height($(domElem) + 10).appendTo("#data");
var closeItem = $("
").appendTo(editContent);
- var rightResize = $("
").appendTo(editContent);
- var bottomResize = $("
").appendTo(editContent);
editContent.css("top", $(domElem).position().top).css("left", $(domElem).position().left);
$(domElem).css("position","static")
.width("100%")
@@ -161,7 +167,7 @@ function init(){
}
}
});
-
+
$("#wgt_help").click(function(){
var tmp = $(this);
if($(this).hasClass("open")){
@@ -178,7 +184,7 @@ function init(){
});
$("#wgt_reload").click(function(){
- window.location.reload();
+ reloadItems();
});
$("#wgt_add").click(function(){
@@ -188,10 +194,9 @@ function init(){
$("#data").show();
});
}
- shadowDiv.show()
+ shadowDiv.show();
shadowOver = true;
- popupBack.show("slow");
-
+ popupBack.show("slow");
$(document).disableTextSelect();
});
@@ -241,7 +246,6 @@ function init(){
shadowOver = false;
$(document).enableTextSelect();
});
-
});
okButton.click(function(){
@@ -256,7 +260,6 @@ function init(){
$(document).enableTextSelect();
})
}
-
});
/* -------------- THE END OF WORK WITH POPUP BUTTONS AND FIELDS ---------------*/
@@ -271,42 +274,33 @@ function init(){
});
$(".readyTask, .editContainer").live("mousedown",function(event){
- if(!shadowOver){
- dragElement = $(this);
- coords.left = event.pageX - $(this).position().left;
- coords.top = event.pageY - $(this).position().top;
- resizeObj.width = $(this).width();
- resizeObj.height = $(this).height();
- }
- if($("#wgt_display").hasClass("selected"))
+ if($("#wgt_display").hasClass("selected")){
+ if(!shadowOver){
+ dragElement = $(this);
+ coords.left = event.pageX - $(this).position().left;
+ coords.top = event.pageY - $(this).position().top;
+ resizeObj.width = $(this).width();
+ resizeObj.height = $(this).height();
+ }
$(document).disableTextSelect();
- });
-
- $(".rightResize").live("mousedown",function(event){
- if(!shadowOver){
- resizeObj.x = true;
- }
- });
-
- $(".bottomResize").live("mousedown",function(event){
- if(!shadowOver){
- resizeObj.y = true;
}
});
$("body").mouseup(function(event){
- if(!shadowOver){
- if (dragElement) {
- exportToSankore();
+ if($("#wgt_display").hasClass("selected")){
+ if(!shadowOver){
+ if (dragElement) {
+ exportToSankore();
+ }
+ dragElement = null;
+ resizeObj.x = false;
+ resizeObj.y = false;
}
- dragElement = null;
- resizeObj.x = false;
- resizeObj.y = false;
}
});
$("body").mousemove(function(event){
- if(dragElement && !shadowOver){
+ if(dragElement && !shadowOver && $("#wgt_display").hasClass("selected")){
var top = event.pageY - coords.top;
var left = event.pageX - coords.left;
var bottom = top + dragElement.height();
@@ -335,6 +329,36 @@ function init(){
}
});
+ $(".taskContainer").live("keyup", function(){
+ if($(".editContainer").size() > 1){
+ var prev = $(".editContainer:first"),
+ prevBottom = prev.position().top + prev.height(),
+ prevLeft = prev.position().left;
+ recursionCall(prevBottom, prevLeft, prev.next());
+ }
+ })
+
+ function recursionCall(prevBottom, prevLeft, curr){
+ var curTop = curr.position().top,
+ curHeight = curr.height(),
+ curLeft = curr.position().left;
+ if(prevLeft == curLeft){
+ if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
+ curr.css("top", prevBottom + 15 + "px");
+ else
+ curr.css("top", "60px").css("left", prevLeft + 255 + "px");
+ } else {
+ if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
+ curr.css("top", prevBottom + 15 + "px").css("left", prevLeft + "px");
+ else
+ curr.css("top", "60px");
+ }
+ prevBottom = curr.position().top + curr.height(),
+ prevLeft = curr.position().left;
+ if(curr.next().length)
+ recursionCall(prevBottom, prevLeft, curr.next());
+ }
+
//$("#leftDiv,#rightDiv,#shadowDiv").css("height", $(window).height());
popupBack.css("top", ($(window).height() - 138)*50/$(window).height() + "%");
popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%");
@@ -347,7 +371,7 @@ function init(){
if (window.widget) {
window.widget.onleave = function(){
- //exportToSankore();
+ exportToSankore();
sankore.setPreference("by_style", $(".style_select").find("option:selected").val());
}
}
@@ -397,7 +421,8 @@ function init(){
});
}
}
- sankore.setPreference("blackYellowData", JSON.stringify(arrayToExport));
+ if(window.sankore)
+ sankore.setPreference("blackYellowData", JSON.stringify(arrayToExport));
}
}
@@ -412,18 +437,70 @@ function checkEmptyFields(field){
}
}
+//reload
+function reloadItems(){
+ if($("#wgt_edit").hasClass("selected"))
+ $("#wgt_display").trigger("click");
+ else{
+ var tmp_array = [];
+ $(".readyTask").each(function(){
+ tmp_array.push($(this));
+ });
+ tmp_array = shuffle(tmp_array);
+ orderItems(tmp_array);
+ }
+
+}
+
+//order items
+function orderItems(items){
+ var bottom = 45,
+ lastItemLeft = 54;
+ for (var i in items){
+ if((bottom + items[i].height()) < ($(window).height() - 54)){
+ items[i].css("top", bottom + 15 + "px").css("left", lastItemLeft + "px").appendTo("#data");
+ bottom += items[i].height() + 15;
+ } else {
+ bottom = 60;
+ lastItemLeft += 255;
+ items[i].css("top", bottom + "px").css("left", lastItemLeft + "px").appendTo("#data");
+ bottom += items[i].height();
+ }
+ }
+}
+
+//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;
+}
+
//adding a new task to the page
function addTask(expression, result){
var lastItem = $(".editContainer:last"),
lastItemPos = lastItem.length ? lastItem.position().top : 45,
- lastItemHeight = lastItem.length ? lastItem.height() : 0;
- var editContent = $("
").width(240).height(70).css("top", lastItemPos + lastItemHeight + 15 + "px").appendTo("#data");
- var closeItem = $("
").appendTo(editContent);
- var rightResize = $("
").appendTo(editContent);
- var bottomResize = $("
").appendTo(editContent);
+ lastItemHeight = lastItem.length ? lastItem.height() : 0,
+ lastItemLeft = lastItem.length ? lastItem.position().left : 54;
+ var bottom = lastItemPos + lastItemHeight + 85;
+ var editContent = $("
");
+ $("
").appendTo(editContent);
var main = $("
");
- var exprContainer = $("
" + expression + "
").appendTo(main);
- var resContainer = $("
"+ result + "
").appendTo(main);
+ $("
" + expression + "
").appendTo(main);
+ $("
"+ result + "
").appendTo(main);
+ if(bottom < ($(window).height() - 54)){
+ editContent.css("top", lastItemPos + lastItemHeight + 15 + "px").css("left", lastItemLeft + "px").appendTo("#data");
+ } else {
+ lastItemPos = 45;
+ editContent.css("top", lastItemPos + 15 + "px").css("left", lastItemLeft + 255 + "px").appendTo("#data");
+ }
main.appendTo(editContent);
}
diff --git a/resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js b/resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js
index 33687d4d..27035aaf 100644
--- a/resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js
+++ b/resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js
@@ -109,7 +109,7 @@ function init(){
mode = false;
$(".leftDiv, .rightDiv").animate({
"opacity":"1"
- },"slow",function(){
+ },"fast",function(){
if(opacityChanged){
if($(".editContainer").size() != 0){
$(".editContainer").each(function(index, domElem){
@@ -142,14 +142,17 @@ function init(){
$(document).enableTextSelect();
$(".leftDiv, .rightDiv").animate({
"opacity":"0.4"
- },"slow",function(){
+ },"fast",function(){
if(!opacityChanged){
if($(".readyTask").size() != 0){
+ var tmp_arr = [];
+ $(".readyTask").each(function(){
+ tmp_arr.push($(this));
+ })
+ orderItems(tmp_arr);
$(".readyTask").each(function(index, domElem){
var editContent = $("
").width($(domElem).width() + 10).height($(domElem) + 10).appendTo("#data");
var closeItem = $("
").appendTo(editContent);
- var rightResize = $("
").appendTo(editContent);
- var bottomResize = $("
").appendTo(editContent);
editContent.css("top", $(domElem).position().top).css("left", $(domElem).position().left);
$(domElem).css("position","static")
.width("100%")
@@ -181,7 +184,7 @@ function init(){
});
$("#wgt_reload").click(function(){
- window.location.reload();
+ reloadItems();
});
$("#wgt_add").click(function(){
@@ -271,42 +274,33 @@ function init(){
});
$(".readyTask, .editContainer").live("mousedown",function(event){
- if(!shadowOver){
- dragElement = $(this);
- coords.left = event.pageX - $(this).position().left;
- coords.top = event.pageY - $(this).position().top;
- resizeObj.width = $(this).width();
- resizeObj.height = $(this).height();
- }
- if($("#wgt_display").hasClass("selected"))
+ if($("#wgt_display").hasClass("selected")){
+ if(!shadowOver){
+ dragElement = $(this);
+ coords.left = event.pageX - $(this).position().left;
+ coords.top = event.pageY - $(this).position().top;
+ resizeObj.width = $(this).width();
+ resizeObj.height = $(this).height();
+ }
$(document).disableTextSelect();
- });
-
- $(".rightResize").live("mousedown",function(event){
- if(!shadowOver){
- resizeObj.x = true;
- }
- });
-
- $(".bottomResize").live("mousedown",function(event){
- if(!shadowOver){
- resizeObj.y = true;
}
});
$("body").mouseup(function(event){
- if(!shadowOver){
- if (dragElement) {
- exportToSankore();
+ if($("#wgt_display").hasClass("selected")){
+ if(!shadowOver){
+ if (dragElement) {
+ exportToSankore();
+ }
+ dragElement = null;
+ resizeObj.x = false;
+ resizeObj.y = false;
}
- dragElement = null;
- resizeObj.x = false;
- resizeObj.y = false;
}
});
$("body").mousemove(function(event){
- if(dragElement && !shadowOver){
+ if(dragElement && !shadowOver && $("#wgt_display").hasClass("selected")){
var top = event.pageY - coords.top;
var left = event.pageX - coords.left;
var bottom = top + dragElement.height();
@@ -335,6 +329,36 @@ function init(){
}
});
+ $(".taskContainer").live("keyup", function(){
+ if($(".editContainer").size() > 1){
+ var prev = $(".editContainer:first"),
+ prevBottom = prev.position().top + prev.height(),
+ prevLeft = prev.position().left;
+ recursionCall(prevBottom, prevLeft, prev.next());
+ }
+ })
+
+ function recursionCall(prevBottom, prevLeft, curr){
+ var curTop = curr.position().top,
+ curHeight = curr.height(),
+ curLeft = curr.position().left;
+ if(prevLeft == curLeft){
+ if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
+ curr.css("top", prevBottom + 15 + "px");
+ else
+ curr.css("top", "60px").css("left", prevLeft + 255 + "px");
+ } else {
+ if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
+ curr.css("top", prevBottom + 15 + "px").css("left", prevLeft + "px");
+ else
+ curr.css("top", "60px");
+ }
+ prevBottom = curr.position().top + curr.height(),
+ prevLeft = curr.position().left;
+ if(curr.next().length)
+ recursionCall(prevBottom, prevLeft, curr.next());
+ }
+
//$("#leftDiv,#rightDiv,#shadowDiv").css("height", $(window).height());
popupBack.css("top", ($(window).height() - 138)*50/$(window).height() + "%");
popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%");
@@ -347,7 +371,7 @@ function init(){
if (window.widget) {
window.widget.onleave = function(){
- //exportToSankore();
+ exportToSankore();
sankore.setPreference("by_style", $(".style_select").find("option:selected").val());
}
}
@@ -413,18 +437,70 @@ function checkEmptyFields(field){
}
}
+//reload
+function reloadItems(){
+ if($("#wgt_edit").hasClass("selected"))
+ $("#wgt_display").trigger("click");
+ else{
+ var tmp_array = [];
+ $(".readyTask").each(function(){
+ tmp_array.push($(this));
+ });
+ tmp_array = shuffle(tmp_array);
+ orderItems(tmp_array);
+ }
+
+}
+
+//order items
+function orderItems(items){
+ var bottom = 45,
+ lastItemLeft = 54;
+ for (var i in items){
+ if((bottom + items[i].height()) < ($(window).height() - 54)){
+ items[i].css("top", bottom + 15 + "px").css("left", lastItemLeft + "px").appendTo("#data");
+ bottom += items[i].height() + 15;
+ } else {
+ bottom = 60;
+ lastItemLeft += 255;
+ items[i].css("top", bottom + "px").css("left", lastItemLeft + "px").appendTo("#data");
+ bottom += items[i].height();
+ }
+ }
+}
+
+//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;
+}
+
//adding a new task to the page
function addTask(expression, result){
var lastItem = $(".editContainer:last"),
lastItemPos = lastItem.length ? lastItem.position().top : 45,
- lastItemHeight = lastItem.length ? lastItem.height() : 0;
- var editContent = $("
").width(240).height(70).css("top", lastItemPos + lastItemHeight + 15 + "px").appendTo("#data");
- var closeItem = $("
").appendTo(editContent);
- var rightResize = $("
").appendTo(editContent);
- var bottomResize = $("
").appendTo(editContent);
+ lastItemHeight = lastItem.length ? lastItem.height() : 0,
+ lastItemLeft = lastItem.length ? lastItem.position().left : 54;
+ var bottom = lastItemPos + lastItemHeight + 85;
+ var editContent = $("
");
+ $("
").appendTo(editContent);
var main = $("
");
- var exprContainer = $("
" + expression + "
").appendTo(main);
- var resContainer = $("
"+ result + "
").appendTo(main);
+ $("
" + expression + "
").appendTo(main);
+ $("
"+ result + "
").appendTo(main);
+ if(bottom < ($(window).height() - 54)){
+ editContent.css("top", lastItemPos + lastItemHeight + 15 + "px").css("left", lastItemLeft + "px").appendTo("#data");
+ } else {
+ lastItemPos = 45;
+ editContent.css("top", lastItemPos + 15 + "px").css("left", lastItemLeft + 255 + "px").appendTo("#data");
+ }
main.appendTo(editContent);
}
diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp
index d5a383df..713f015c 100644
--- a/src/board/UBBoardController.cpp
+++ b/src/board/UBBoardController.cpp
@@ -54,6 +54,8 @@
#include "domain/UBGraphicsGroupContainerItem.h"
#include "domain/UBItem.h"
#include "board/UBFeaturesController.h"
+#include "domain/UBGraphicsStrokesGroup.h"
+
#include "gui/UBFeaturesWidget.h"
#include "tools/UBToolsManager.h"
@@ -158,7 +160,7 @@ void UBBoardController::setupViews()
mControlLayout = new QHBoxLayout(mControlContainer);
mControlLayout->setContentsMargins(0, 0, 0, 0);
- mControlView = new UBBoardView(this, mControlContainer);
+ mControlView = new UBBoardView(this, mControlContainer, true);
mControlView->setInteractive(true);
mControlView->setMouseTracking(true);
@@ -536,6 +538,8 @@ void UBBoardController::duplicateItem(UBItem *item)
if (!item)
return;
+ mLastCreatedItem = NULL;
+
QUrl sourceUrl;
QByteArray pData;
@@ -551,9 +555,13 @@ void UBBoardController::duplicateItem(UBItem *item)
itemSize = commonItem->boundingRect().size();
}
+ UBMimeType::Enum itemMimeType;
QString contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(item->sourceUrl().toLocalFile());
-
- UBMimeType::Enum itemMimeType = UBFileSystemUtils::mimeTypeFromString(contentTypeHeader);
+ if(NULL != qgraphicsitem_cast
(commonItem)){
+ itemMimeType = UBMimeType::Group;
+ }else{
+ itemMimeType = UBFileSystemUtils::mimeTypeFromString(contentTypeHeader);
+ }
switch(static_cast(itemMimeType))
{
@@ -598,13 +606,37 @@ void UBBoardController::duplicateItem(UBItem *item)
pixitem->pixmap().save(&buffer, format.toLatin1());
}
}break;
+
+ case UBMimeType::Group:
+ {
+ UBGraphicsGroupContainerItem* groupItem = dynamic_cast(item);
+ if(groupItem){
+ QList children = groupItem->childItems();
+ foreach(QGraphicsItem* pIt, children){
+ UBItem* pItem = dynamic_cast(pIt);
+ if(NULL != pItem){
+ duplicateItem(pItem); // The duplication already copies the item parameters
+ if(NULL != mLastCreatedItem){
+ mLastCreatedItem->setSelected(true);
+ }
+ }
+ }
+ groupItem->setSelected(false);
+ UBApplication::mainWindow->actionGroupItems->trigger();
+ }
+ return;
+ break;
+ }
+
case UBMimeType::UNKNOWN:
{
QGraphicsItem *gitem = dynamic_cast(item->deepCopy());
if (gitem)
{
+ qDebug() << "Adding a stroke: " << gitem;
mActiveScene->addItem(gitem);
gitem->setPos(itemPos);
+ mLastCreatedItem = gitem;
}
return;
}break;
@@ -619,12 +651,13 @@ void UBBoardController::duplicateItem(UBItem *item)
QGraphicsItem *createdGitem = dynamic_cast(createdItem);
if (createdGitem)
createdGitem->setPos(itemPos);
- }
+ mLastCreatedItem = dynamic_cast(createdItem);
+ }
}
void UBBoardController::deleteScene(int nIndex)
{
- if (selectedDocument()->pageCount()>2)
+ if (selectedDocument()->pageCount()>=2)
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
persistCurrentScene();
@@ -1466,12 +1499,13 @@ void UBBoardController::ClearUndoStack()
while (itUniq.hasNext())
{
QGraphicsItem* item = itUniq.next();
+ UBGraphicsScene *scene = NULL;
if (item->scene()) {
- UBGraphicsScene *scene = dynamic_cast(item->scene());
- if(!scene)
- {
- mActiveScene->deleteItem(item);
- }
+ scene = dynamic_cast(item->scene());
+ }
+ if(!scene)
+ {
+ mActiveScene->deleteItem(item);
}
}
diff --git a/src/board/UBBoardController.h b/src/board/UBBoardController.h
index 8f100c73..042ba24a 100644
--- a/src/board/UBBoardController.h
+++ b/src/board/UBBoardController.h
@@ -279,6 +279,7 @@ class UBBoardController : public UBDocumentContainer
bool mCleanupDone;
QMap > mActionTexts;
bool mCacheWidgetIsEnabled;
+ QGraphicsItem* mLastCreatedItem;
private slots:
void stylusToolDoubleClicked(int tool);
diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp
index 4786c9d0..4fcca179 100644
--- a/src/board/UBBoardView.cpp
+++ b/src/board/UBBoardView.cpp
@@ -62,7 +62,7 @@
#include "core/memcheck.h"
-UBBoardView::UBBoardView (UBBoardController* pController, QWidget* pParent)
+UBBoardView::UBBoardView (UBBoardController* pController, QWidget* pParent, bool pIsControl)
: QGraphicsView (pParent)
, mController (pController)
, mIsCreatingTextZone (false)
@@ -72,6 +72,7 @@ UBBoardView::UBBoardView (UBBoardController* pController, QWidget* pParent)
, mLongPressInterval(1000)
, mIsDragInProgress(false)
, mMultipleSelectionIsEnabled(false)
+, isControl(pIsControl)
{
init ();
@@ -81,13 +82,14 @@ UBBoardView::UBBoardView (UBBoardController* pController, QWidget* pParent)
mLongPressTimer.setSingleShot(true);
}
-UBBoardView::UBBoardView (UBBoardController* pController, int pStartLayer, int pEndLayer, QWidget* pParent)
+UBBoardView::UBBoardView (UBBoardController* pController, int pStartLayer, int pEndLayer, QWidget* pParent, bool pIscontrol)
: QGraphicsView (pParent)
, mController (pController)
, suspendedMousePressEvent(NULL)
, mLongPressInterval(1000)
, mIsDragInProgress(false)
, mMultipleSelectionIsEnabled(false)
+, isControl(pIscontrol)
{
init ();
@@ -124,6 +126,8 @@ void UBBoardView::init ()
setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
setAcceptDrops (true);
+ setOptimizationFlag (QGraphicsView::IndirectPainting); // enable UBBoardView::drawItems filter
+
mTabletStylusIsPressed = false;
mMouseButtonIsPressed = false;
mPendingStylusReleaseEvent = false;
@@ -532,11 +536,11 @@ bool UBBoardView::itemShouldBeMoved(QGraphicsItem *item)
if (movingItem->data(UBGraphicsItemData::ItemLocked).toBool())
return false;
+ if (movingItem->parentItem() && UBGraphicsGroupContainerItem::Type == movingItem->parentItem()->type() && !movingItem->isSelected() && movingItem->parentItem()->isSelected())
+ return false;
+
UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool();
- if (movingItem->parentItem() && !movingItem->isSelected() && movingItem->parentItem()->isSelected())
- return false;
-
switch(item->type())
{
case UBGraphicsGroupContainerItem::Type:
@@ -557,6 +561,7 @@ bool UBBoardView::itemShouldBeMoved(QGraphicsItem *item)
case UBGraphicsTextItem::Type:
return !item->isSelected();
}
+
return false;
}
@@ -566,24 +571,33 @@ QGraphicsItem* UBBoardView::determineItemToMove(QGraphicsItem *item)
if(item)
{
UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool();
+
+ //W3C widgets should take mouse move events from play tool.
if ((UBStylusTool::Play == currentTool) && (UBGraphicsW3CWidgetItem::Type == item->type()))
return item;
+ // if item is in group
if(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type())
{
+ // play tool should move groups by any element
if (UBStylusTool::Play == currentTool && item->parentItem()->isSelected())
return item->parentItem();
-
+
+ // groups should should be moved instead of strokes groups
+ if (UBGraphicsStrokesGroup::Type == item->type())
+ return item->parentItem();
+
+ // selected groups should be moved by moving any element
if (item->parentItem()->isSelected())
return item;
-
-
+
if (item->isSelected())
return NULL;
return item->parentItem();
}
+ // items like polygons placed in two groups nested, so we need to recursive call.
if(item->parentItem() && UBGraphicsStrokesGroup::Type == item->parentItem()->type())
return determineItemToMove(item->parentItem());
}
@@ -595,14 +609,20 @@ void UBBoardView::handleItemMousePress(QMouseEvent *event)
{
mLastPressedMousePos = mapToScene(event->pos());
-
- if (movingItem && QGraphicsSvgItem::Type != movingItem->type()
- && UBGraphicsDelegateFrame::Type != movingItem->type()
+ // Determining item who will take mouse press event
+ //all other items will be deselected and if all item will be deselected, then
+ // wrong item can catch mouse press. because selected items placed on the top
+ QGraphicsItem *pressedItem = determineItemToMove(movingItem);
+
+ if (movingItem
+ && !(movingItem->parentItem() && UBGraphicsGroupContainerItem::Type == movingItem->parentItem()->type())
+ && QGraphicsSvgItem::Type != movingItem->type()
+ && UBGraphicsDelegateFrame::Type != movingItem->type()
&& !mMultipleSelectionIsEnabled)
{
foreach(QGraphicsItem *item, scene()->selectedItems())
{
- if (item != movingItem)
+ if (item != pressedItem)
{
item->setSelected(false);
}
@@ -634,9 +654,10 @@ void UBBoardView::handleItemMousePress(QMouseEvent *event)
void UBBoardView::handleItemMouseMove(QMouseEvent *event)
{
- if (movingItem)
- movingItem = determineItemToMove(movingItem);
+ // determine item to move (maybee we need to move group of item or his parent.
+ movingItem = determineItemToMove(movingItem);
+ // items should be moved not every mouse move.
if (movingItem && itemShouldBeMoved(movingItem) && (mMouseButtonIsPressed || mTabletStylusIsPressed))
{
QPointF scenePos = mapToScene(event->pos());
@@ -662,6 +683,8 @@ void UBBoardView::handleItemMouseMove(QMouseEvent *event)
mWidgetMoved = ((posAfterMove-posBeforeMove).manhattanLength() != 0);
// a cludge for terminate moving of w3c widgets.
+ // in some cases w3c widgets catches mouse move and doesn't sends that events to web page,
+ // at simple - in google map widget - mouse move events doesn't comes to web page from rectangle of wearch bar on bottom right corner of widget.
if (mWidgetMoved && UBGraphicsW3CWidgetItem::Type == movingItem->type())
movingItem->setPos(posBeforeMove);
@@ -729,6 +752,11 @@ void UBBoardView::longPressEvent()
void UBBoardView::mousePressEvent (QMouseEvent *event)
{
+ if (!isControl) {
+ event->ignore();
+ return;
+ }
+
mIsDragInProgress = false;
if (isAbsurdPoint (event->pos ()))
@@ -990,7 +1018,8 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event)
if (QGraphicsSvgItem::Type != movingItem->type() &&
UBGraphicsDelegateFrame::Type != movingItem->type() &&
UBToolWidget::Type != movingItem->type() &&
- QGraphicsWidget::Type != movingItem->type())
+ QGraphicsWidget::Type != movingItem->type() &&
+ !(movingItem->parentItem() && UBGraphicsW3CWidgetItem::Type == movingItem->type() && UBGraphicsGroupContainerItem::Type == movingItem->parentItem()->type()))
{
bReleaseIsNeed = false;
if (movingItem->isSelected() && mMultipleSelectionIsEnabled)
@@ -1405,3 +1434,13 @@ UBBoardView::setToolCursor (int tool)
controlViewport->setCursor (UBResources::resources ()->penCursor);
}
}
+
+
+bool UBBoardView::hasSelectedParents(QGraphicsItem * item)
+{
+ if (item->isSelected())
+ return true;
+ if (item->parentItem()==NULL)
+ return false;
+ return hasSelectedParents(item->parentItem());
+}
diff --git a/src/board/UBBoardView.h b/src/board/UBBoardView.h
index 34cf7fc7..310ec2ec 100644
--- a/src/board/UBBoardView.h
+++ b/src/board/UBBoardView.h
@@ -31,8 +31,8 @@ class UBBoardView : public QGraphicsView
public:
- UBBoardView(UBBoardController* pController, QWidget* pParent = 0);
- UBBoardView(UBBoardController* pController, int pStartLayer, int pEndLayer, QWidget* pParent = 0);
+ UBBoardView(UBBoardController* pController, QWidget* pParent = 0, bool pIsControl = false);
+ UBBoardView(UBBoardController* pController, int pStartLayer, int pEndLayer, QWidget* pParent = 0, bool pIscontrol = false);
virtual ~UBBoardView();
UBGraphicsScene* scene();
@@ -147,6 +147,9 @@ class UBBoardView : public QGraphicsView
bool mIsDragInProgress;
bool mMultipleSelectionIsEnabled;
+ bool isControl;
+
+ static bool hasSelectedParents(QGraphicsItem * item);
private slots:
diff --git a/src/core/UB.h b/src/core/UB.h
index afc0f91e..02e2ba18 100644
--- a/src/core/UB.h
+++ b/src/core/UB.h
@@ -33,6 +33,7 @@ struct UBMimeType
Flash,
PDF,
UniboardTool,
+ Group,
UNKNOWN
};
};
diff --git a/src/desktop/UBDesktopPalette.cpp b/src/desktop/UBDesktopPalette.cpp
index 2ac196f9..2b3902b2 100644
--- a/src/desktop/UBDesktopPalette.cpp
+++ b/src/desktop/UBDesktopPalette.cpp
@@ -57,9 +57,7 @@ UBDesktopPalette::UBDesktopPalette(QWidget *parent)
mShowHideAction->setCheckable(true);
connect(mShowHideAction, SIGNAL(triggered(bool)), this, SLOT(showHideClick(bool)));
-#ifndef Q_WS_X11
actions << mShowHideAction;
-#endif
setActions(actions);
setButtonIconSize(QSize(42, 42));
diff --git a/src/domain/UBAbstractUndoCommand.h b/src/domain/UBAbstractUndoCommand.h
index da451769..a0c3d187 100644
--- a/src/domain/UBAbstractUndoCommand.h
+++ b/src/domain/UBAbstractUndoCommand.h
@@ -32,7 +32,8 @@ class UBAbstractUndoCommand : public QUndoCommand
undotype_GRAPHICITEMTRANSFORM = 2,
undotype_GRAPHICITEM = 3,
undotype_GRAPHICTEXTITEM = 4,
- undotype_PAGESIZE = 5
+ undotype_PAGESIZE = 5,
+ undotype_GRAPHICSGROUPITEM = 6
};
virtual UndoType getType() { return undotype_UNKNOWN; }
diff --git a/src/domain/UBGraphicsDelegateFrame.cpp b/src/domain/UBGraphicsDelegateFrame.cpp
index e2181020..a2da072a 100644
--- a/src/domain/UBGraphicsDelegateFrame.cpp
+++ b/src/domain/UBGraphicsDelegateFrame.cpp
@@ -228,6 +228,9 @@ void UBGraphicsDelegateFrame::mousePressEvent(QGraphicsSceneMouseEvent *event)
mCurrentTool = toolFromPos(event->pos());
setCursorFromAngle(QString(""));
event->accept();
+
+ prepareFramesToMove(getLinkedFrames());
+
}
void UBGraphicsDelegateFrame::setCursorFromAngle(QString angle)
@@ -469,33 +472,25 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
mTranslateX = move.dx();
mTranslateY = move.dy();
+ moveLinkedItems(move);
}
QTransform tr = buildTransform();
- //TODO UB 4.x: Could find a better solution ?
if (resizingRight() || resizingBottom() || resizingBottomRight())
{
QPointF ref;
- if(!mMirrorX && !mMirrorY){
- ref = delegated()->boundingRect().topLeft();
- }else if(mMirrorX && !mMirrorY){
- ref = delegated()->boundingRect().topLeft();
- }else if(!mMirrorX && mMirrorY){
- ref = delegated()->boundingRect().topLeft();
- }else if(mMirrorX && mMirrorY){
- ref = delegated()->boundingRect().topRight();
- }
- // Map the item topleft point to the current mouse move transform
- QPointF topLeft = tr.map(ref);
-
- // Map the item topleft point to the mouse press transform
- QPointF fixedPoint = mInitialTransform.map(ref);
+ // we just detects coordinates of corner before and after scaling and then moves object at diff between them.
+ if (resizingBottomRight() && mMirrorX)
+ mTranslateX += mInitialTransform.map(delegated()->boundingRect().bottomRight()).x() - tr.map(delegated()->boundingRect().bottomRight()).x();
+ else
+ mTranslateX += mInitialTransform.map(delegated()->boundingRect().topLeft()).x() - tr.map(delegated()->boundingRect().topLeft()).x();
- // Update the translation coordinates
- mTranslateX += fixedPoint.x() - topLeft.x();
- mTranslateY += fixedPoint.y() - topLeft.y();
+ if (resizingBottomRight() && mMirrorY)
+ mTranslateY += mInitialTransform.map(delegated()->boundingRect().bottomRight()).y() - tr.map(delegated()->boundingRect().bottomRight()).y();
+ else
+ mTranslateY += mInitialTransform.map(delegated()->boundingRect().topLeft()).y() - tr.map(delegated()->boundingRect().topLeft()).y();
// Update the transform
tr = buildTransform();
@@ -534,6 +529,71 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
event->accept();
}
+QList UBGraphicsDelegateFrame::getLinkedFrames()
+{
+ QList linkedFrames;
+ QList sItems = mDelegate->delegated()->scene()->selectedItems();
+ if (sItems.count())
+ {
+ sItems.removeAll(delegated());
+
+ foreach(QGraphicsItem *item, sItems)
+ {
+ UBGraphicsItem *gitem = dynamic_cast(item);
+ if (gitem)
+ linkedFrames << gitem->Delegate()->frame();
+ }
+ }
+ return linkedFrames;
+}
+
+void UBGraphicsDelegateFrame::prepareFramesToMove(QList framesToMove)
+{
+ mLinkedFrames = framesToMove;
+ foreach (UBGraphicsDelegateFrame *frame, mLinkedFrames)
+ {
+ frame->prepareLinkedFrameToMove();
+ }
+}
+
+void UBGraphicsDelegateFrame::prepareLinkedFrameToMove()
+{
+ mDelegate->startUndoStep();
+
+ mStartingPoint = QPointF(0,0);
+
+ initializeTransform();
+
+ mScaleX = 1;
+ mScaleY = 1;
+ mTranslateX = 0;
+ mTranslateY = 0;
+ mAngleOffset = 0;
+
+ mInitialTransform = buildTransform();
+
+ mCurrentTool = Move;
+}
+
+void UBGraphicsDelegateFrame::moveLinkedItems(QLineF movingVector, bool bLinked)
+{
+ if (bLinked)
+ {
+ mCurrentTool = Move;
+
+ mTranslateX = movingVector.dx();
+ mTranslateY = movingVector.dy();
+
+ delegated()->setTransform(buildTransform(), false);
+ }
+ else
+ {
+ foreach(UBGraphicsDelegateFrame* frame, mLinkedFrames)
+ {
+ frame->moveLinkedItems(movingVector, true);
+ }
+ }
+}
QTransform UBGraphicsDelegateFrame::buildTransform()
{
diff --git a/src/domain/UBGraphicsDelegateFrame.h b/src/domain/UBGraphicsDelegateFrame.h
index b08ae219..142766fe 100644
--- a/src/domain/UBGraphicsDelegateFrame.h
+++ b/src/domain/UBGraphicsDelegateFrame.h
@@ -48,6 +48,10 @@ class UBGraphicsDelegateFrame: public QGraphicsRectItem, public QObject
enum OperationMode {Scaling, Resizing, ResizingHorizontally};
void setOperationMode(OperationMode pMode) {mOperationMode = pMode;}
bool isResizing(){return mResizing;}
+ void moveLinkedItems(QLineF movingVector, bool bLinked = false);
+ void prepareFramesToMove(QList framesToMove);
+ void prepareLinkedFrameToMove();
+ QList getLinkedFrames();
private:
QRectF bottomRightResizeGripRect() const;
@@ -120,5 +124,7 @@ class UBGraphicsDelegateFrame: public QGraphicsRectItem, public QObject
bool mResizing;
bool mMirroredXAtStart;
bool mMirroredYAtStart;
+
+ QList mLinkedFrames;
};
#endif /* UBGRAPHICSDELEGATEFRAME_H_ */
diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp
index 75e57711..bed3b219 100644
--- a/src/domain/UBGraphicsGroupContainerItem.cpp
+++ b/src/domain/UBGraphicsGroupContainerItem.cpp
@@ -32,6 +32,16 @@ UBGraphicsGroupContainerItem::UBGraphicsGroupContainerItem(QGraphicsItem *parent
}
+UBGraphicsGroupContainerItem::~UBGraphicsGroupContainerItem()
+{
+ foreach (QGraphicsItem *item, childItems())
+ {
+ removeFromGroup(item);
+ if (item && item->scene())
+ item->scene()->removeItem(item);
+ }
+}
+
void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item)
{
if (!item) {
diff --git a/src/domain/UBGraphicsGroupContainerItem.h b/src/domain/UBGraphicsGroupContainerItem.h
index 1eca384a..535627eb 100644
--- a/src/domain/UBGraphicsGroupContainerItem.h
+++ b/src/domain/UBGraphicsGroupContainerItem.h
@@ -10,6 +10,7 @@ class UBGraphicsGroupContainerItem : public QGraphicsItem, public UBItem, public
public:
UBGraphicsGroupContainerItem (QGraphicsItem *parent = 0);
+ virtual ~UBGraphicsGroupContainerItem();
void addToGroup(QGraphicsItem *item);
void removeFromGroup(QGraphicsItem *item);
diff --git a/src/domain/UBGraphicsGroupContainerItemDelegate.cpp b/src/domain/UBGraphicsGroupContainerItemDelegate.cpp
index 6d753cd8..8a24f8f0 100644
--- a/src/domain/UBGraphicsGroupContainerItemDelegate.cpp
+++ b/src/domain/UBGraphicsGroupContainerItemDelegate.cpp
@@ -19,6 +19,7 @@ UBGraphicsGroupContainerItemDelegate::UBGraphicsGroupContainerItemDelegate(QGrap
//Wrapper function. Use it to set correct data() to QGraphicsItem as well
setFlippable(false);
setRotatable(false);
+ setCanDuplicate(true);
}
UBGraphicsGroupContainerItem *UBGraphicsGroupContainerItemDelegate::delegated()
diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp
index 962121a9..e0cfcc33 100644
--- a/src/domain/UBGraphicsItemDelegate.cpp
+++ b/src/domain/UBGraphicsItemDelegate.cpp
@@ -195,10 +195,10 @@ QVariant UBGraphicsItemDelegate::itemChange(QGraphicsItem::GraphicsItemChange ch
if ((change == QGraphicsItem::ItemSelectedHasChanged
|| change == QGraphicsItem::ItemPositionHasChanged
|| change == QGraphicsItem::ItemTransformHasChanged)
- && mDelegated->scene())
- {
+ && mDelegated->scene()
+ && UBApplication::boardController)
+ {
mAntiScaleRatio = 1 / (UBApplication::boardController->systemScaleFactor() * UBApplication::boardController->currentZoom());
-
positionHandles();
}
@@ -471,18 +471,18 @@ void UBGraphicsItemDelegate::lock(bool locked)
mFrame->positionHandles();
}
-
-void UBGraphicsItemDelegate::showHide(bool show)
+void UBGraphicsItemDelegate::showHideRecurs(const QVariant &pShow, QGraphicsItem *pItem)
{
- if (show)
- {
- mDelegated->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Object));
- }
- else
- {
- mDelegated->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control));
+ pItem->setData(UBGraphicsItemData::ItemLayerType, pShow);
+ foreach (QGraphicsItem *insideItem, pItem->childItems()) {
+ showHideRecurs(pShow, insideItem);
}
+}
+void UBGraphicsItemDelegate::showHide(bool show)
+{
+ QVariant showFlag = QVariant(show ? UBItemLayerType::Object : UBItemLayerType::Control);
+ showHideRecurs(showFlag, mDelegated);
mDelegated->update();
emit showOnDisplayChanged(show);
diff --git a/src/domain/UBGraphicsItemDelegate.h b/src/domain/UBGraphicsItemDelegate.h
index fc5c460c..099dd06d 100644
--- a/src/domain/UBGraphicsItemDelegate.h
+++ b/src/domain/UBGraphicsItemDelegate.h
@@ -297,6 +297,7 @@ protected slots:
private:
void updateFrame();
void updateButtons(bool showUpdated = false);
+ inline void showHideRecurs(const QVariant &pShow, QGraphicsItem *pItem);
QPointF mOffset;
QTransform mPreviousTransform;
diff --git a/src/domain/UBGraphicsItemGroupUndoCommand.cpp b/src/domain/UBGraphicsItemGroupUndoCommand.cpp
new file mode 100644
index 00000000..9b58dc1d
--- /dev/null
+++ b/src/domain/UBGraphicsItemGroupUndoCommand.cpp
@@ -0,0 +1,58 @@
+#include "UBGraphicsItemGroupUndoCommand.h"
+
+#include "UBGraphicsGroupContainerItem.h"
+#include "UBGraphicsScene.h"
+#include "core/memcheck.h"
+
+
+UBGraphicsItemGroupUndoCommand::UBGraphicsItemGroupUndoCommand(UBGraphicsScene *pScene, UBGraphicsGroupContainerItem *pGroupCreated) :
+ mScene (pScene), mGroup(pGroupCreated), mFirstRedo(true)
+
+{
+ if (pGroupCreated->childItems().count()) {
+ foreach (QGraphicsItem *item, pGroupCreated->childItems()) {
+ mItems << item;
+ }
+ }
+}
+
+UBGraphicsItemGroupUndoCommand::~UBGraphicsItemGroupUndoCommand()
+{
+}
+
+void UBGraphicsItemGroupUndoCommand::undo()
+{
+ mGroup->destroy();
+ foreach(QGraphicsItem *item, mItems) {
+ item->setSelected(true);
+ }
+}
+
+void UBGraphicsItemGroupUndoCommand::redo()
+{
+ if (mFirstRedo) {
+ //Work around. TODO determine why does Qt call the redo function on pushing to undo
+ mFirstRedo = false;
+ return;
+ }
+
+ foreach (QGraphicsItem *item, mItems) {
+ if (item->type() == UBGraphicsGroupContainerItem::Type) {
+ QList childItems = item->childItems();
+ UBGraphicsGroupContainerItem *currentGroup = dynamic_cast(item);
+ if (currentGroup) {
+ currentGroup->destroy();
+ }
+ foreach (QGraphicsItem *chItem, childItems) {
+ mGroup->addToGroup(chItem);
+ }
+ } else {
+ mGroup->addToGroup(item);
+ }
+ }
+
+ mScene->addItem(mGroup);
+ mGroup->setVisible(true);
+ mGroup->setFocus();
+ mGroup->setSelected(true);
+}
diff --git a/src/domain/UBGraphicsItemGroupUndoCommand.h b/src/domain/UBGraphicsItemGroupUndoCommand.h
new file mode 100644
index 00000000..bbc0a022
--- /dev/null
+++ b/src/domain/UBGraphicsItemGroupUndoCommand.h
@@ -0,0 +1,30 @@
+#ifndef UBGRAPHICSITEMGROUPUNDOCOMMAND_H
+#define UBGRAPHICSITEMGROUPUNDOCOMMAND_H
+
+#include
+#include "UBAbstractUndoCommand.h"
+
+class UBGraphicsScene;
+class UBGraphicsGroupContainerItem;
+
+class UBGraphicsItemGroupUndoCommand : public UBAbstractUndoCommand
+{
+public:
+ UBGraphicsItemGroupUndoCommand(UBGraphicsScene *pScene, UBGraphicsGroupContainerItem *pGroupCreated);
+ virtual ~UBGraphicsItemGroupUndoCommand();
+
+ virtual UndoType getType() { return undotype_GRAPHICSGROUPITEM; }
+
+protected:
+ virtual void undo();
+ virtual void redo();
+
+private:
+ UBGraphicsScene *mScene;
+ UBGraphicsGroupContainerItem *mGroup;
+ QList mItems;
+
+ bool mFirstRedo;
+};
+
+#endif // UBGRAPHICSITEMGROUPUNDOCOMMAND_H
diff --git a/src/domain/UBGraphicsItemTransformUndoCommand.h b/src/domain/UBGraphicsItemTransformUndoCommand.h
index 0f6b405d..07d8e0c3 100644
--- a/src/domain/UBGraphicsItemTransformUndoCommand.h
+++ b/src/domain/UBGraphicsItemTransformUndoCommand.h
@@ -32,7 +32,7 @@ class UBGraphicsItemTransformUndoCommand : public UBAbstractUndoCommand
const QSizeF& prevSize = QSizeF());
virtual ~UBGraphicsItemTransformUndoCommand();
- virtual UndoType getType() { return undotype_GRAPHICITEMTRANSFORM; };
+ virtual UndoType getType() { return undotype_GRAPHICITEMTRANSFORM; }
protected:
virtual void undo();
diff --git a/src/domain/UBGraphicsItemUndoCommand.cpp b/src/domain/UBGraphicsItemUndoCommand.cpp
index 8d4ebf52..d9961fa0 100644
--- a/src/domain/UBGraphicsItemUndoCommand.cpp
+++ b/src/domain/UBGraphicsItemUndoCommand.cpp
@@ -24,6 +24,7 @@
#include "board/UBBoardController.h"
#include "core/memcheck.h"
+#include "domain/UBGraphicsGroupContainerItem.h"
UBGraphicsItemUndoCommand::UBGraphicsItemUndoCommand(UBGraphicsScene* pScene, const QSet& pRemovedItems,
const QSet& pAddedItems)
@@ -81,6 +82,14 @@ void UBGraphicsItemUndoCommand::undo()
{
QGraphicsItem* item = itAdded.next();
+ //if removing group
+ if (item->type() == UBGraphicsGroupContainerItem::Type) {
+ UBGraphicsGroupContainerItem *curGroup = qgraphicsitem_cast(item);
+ if (curGroup) {
+ curGroup->destroy();
+ }
+ }
+
UBApplication::boardController->freezeW3CWidget(item, true);
item->setSelected(false);
mScene->removeItem(item);
diff --git a/src/domain/UBGraphicsItemUndoCommand.h b/src/domain/UBGraphicsItemUndoCommand.h
index 113c421e..78e7ec9a 100644
--- a/src/domain/UBGraphicsItemUndoCommand.h
+++ b/src/domain/UBGraphicsItemUndoCommand.h
@@ -34,10 +34,10 @@ class UBGraphicsItemUndoCommand : public UBAbstractUndoCommand
virtual ~UBGraphicsItemUndoCommand();
- QSet GetAddedList() { return mAddedItems; };
- QSet GetRemovedList() { return mRemovedItems; };
+ QSet GetAddedList() { return mAddedItems; }
+ QSet GetRemovedList() { return mRemovedItems; }
- virtual UndoType getType() { return undotype_GRAPHICITEM; };
+ virtual UndoType getType() { return undotype_GRAPHICITEM; }
protected:
virtual void undo();
diff --git a/src/domain/UBGraphicsPolygonItem.cpp b/src/domain/UBGraphicsPolygonItem.cpp
index 256f8143..f00bf42b 100644
--- a/src/domain/UBGraphicsPolygonItem.cpp
+++ b/src/domain/UBGraphicsPolygonItem.cpp
@@ -154,7 +154,12 @@ UBItem* UBGraphicsPolygonItem::deepCopy() const
UBGraphicsPolygonItem* UBGraphicsPolygonItem::deepCopy(const QPolygonF& pol) const
{
- UBGraphicsPolygonItem* copy = new UBGraphicsPolygonItem(pol);
+ QPolygonF p(pol);
+ if (parentItem()!=NULL)
+ {
+ p = mapToItem(parentItem(), p);
+ }
+ UBGraphicsPolygonItem* copy = new UBGraphicsPolygonItem(p, parentItem());
copyItemParameters(copy);
diff --git a/src/domain/UBGraphicsPolygonItem.h b/src/domain/UBGraphicsPolygonItem.h
index 6ee1cc7e..1917e731 100644
--- a/src/domain/UBGraphicsPolygonItem.h
+++ b/src/domain/UBGraphicsPolygonItem.h
@@ -20,6 +20,7 @@
#include "core/UB.h"
#include "UBItem.h"
#include "UBGraphicsStrokesGroup.h"
+#include "domain/UBGraphicsGroupContainerItem.h"
class UBItem;
class UBGraphicsScene;
diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp
index 19a7e851..540ce297 100644
--- a/src/domain/UBGraphicsScene.cpp
+++ b/src/domain/UBGraphicsScene.cpp
@@ -47,6 +47,7 @@
#include "board/UBBoardView.h"
#include "UBGraphicsItemUndoCommand.h"
+#include "UBGraphicsItemGroupUndoCommand.h"
#include "UBGraphicsTextItemUndoCommand.h"
#include "UBGraphicsProxyWidget.h"
#include "UBGraphicsPixmapItem.h"
@@ -843,14 +844,18 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth)
// UBGraphicsPolygonItems and added to the scene
foreach(const QPolygonF &pol, croppedPathSimplified.toFillPolygons())
{
- UBGraphicsPolygonItem* croppedPolygonItem = collidingPolygonItem->deepCopy(pol);
+ UBGraphicsPolygonItem* croppedPolygonItem;
#pragma omp critical
- if(NULL != pGroup){
- croppedPolygonItem->setStrokesGroup(pGroup);
- //pGroup->addToGroup(croppedPolygonItem);
+ {
+ croppedPolygonItem = collidingPolygonItem->deepCopy(pol);
+
+ if(NULL != pGroup){
+ croppedPolygonItem->setStrokesGroup(pGroup);
+ //pGroup->addToGroup(croppedPolygonItem);
+ }
+ // Add this new polygon to the 'added' list
+ toBeAddedItems << croppedPolygonItem;
}
- // Add this new polygon to the 'added' list
- toBeAddedItems << croppedPolygonItem;
}
#pragma omp critical
// Remove the original polygonitem because it has been replaced by many smaller polygons
@@ -1521,7 +1526,7 @@ UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QListsetFocus();
if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented
- UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, 0, groupItem);
+ UBGraphicsItemGroupUndoCommand* uc = new UBGraphicsItemGroupUndoCommand(this, groupItem);
UBApplication::undoStack->push(uc);
}
diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp
index 4f1be91f..a5320924 100644
--- a/src/domain/UBGraphicsStrokesGroup.cpp
+++ b/src/domain/UBGraphicsStrokesGroup.cpp
@@ -115,3 +115,23 @@ QVariant UBGraphicsStrokesGroup::itemChange(GraphicsItemChange change, const QVa
QVariant newValue = mDelegate->itemChange(change, value);
return QGraphicsItemGroup::itemChange(change, newValue);
}
+
+
+QPainterPath UBGraphicsStrokesGroup::shape () const
+{
+ QPainterPath path;
+
+ if (isSelected())
+ {
+ path.addRect(boundingRect());
+ }
+ else
+ {
+ foreach(QGraphicsItem* item, childItems())
+ {
+ path.addPath(item->shape());
+ }
+ }
+
+ return path;
+}
diff --git a/src/domain/UBGraphicsStrokesGroup.h b/src/domain/UBGraphicsStrokesGroup.h
index 8339e1c2..b2310773 100644
--- a/src/domain/UBGraphicsStrokesGroup.h
+++ b/src/domain/UBGraphicsStrokesGroup.h
@@ -25,6 +25,9 @@ public:
virtual void setUuid(const QUuid &pUuid);
protected:
+
+ virtual QPainterPath shape () const;
+
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
diff --git a/src/domain/domain.pri b/src/domain/domain.pri
index d66c72ec..1111106f 100644
--- a/src/domain/domain.pri
+++ b/src/domain/domain.pri
@@ -1,61 +1,58 @@
-
-HEADERS += src/domain/UBGraphicsScene.h \
- src/domain/UBGraphicsItemUndoCommand.h \
- src/domain/UBGraphicsTextItemUndoCommand.h \
- src/domain/UBGraphicsItemTransformUndoCommand.h \
- src/domain/UBGraphicsPixmapItem.h \
- src/domain/UBDocumentUndoCommand.h \
- src/domain/UBPageSizeUndoCommand.h \
- src/domain/UBGraphicsProxyWidget.h \
- src/domain/UBGraphicsWebView.h \
- src/domain/UBGraphicsSvgItem.h \
- src/domain/UBGraphicsPolygonItem.h \
- src/domain/UBItem.h \
- src/domain/UBGraphicsWidgetItem.h \
- src/domain/UBGraphicsPDFItem.h \
- src/domain/UBGraphicsTextItem.h \
- src/domain/UBResizableGraphicsItem.h \
- src/domain/UBGraphicsStroke.h \
- src/domain/UBGraphicsMediaItem.h \
- src/domain/UBAbstractUndoCommand.h\
- src/domain/UBGraphicsGroupContainerItem.h \
- src/domain/UBGraphicsGroupContainerItemDelegate.h \
- src/domain/UBGraphicsStrokesGroup.h
-
-HEADERS += src/domain/UBGraphicsItemDelegate.h \
- src/domain/UBGraphicsTextItemDelegate.h \
- src/domain/UBGraphicsDelegateFrame.h \
- src/domain/UBGraphicsWidgetItemDelegate.h \
- src/domain/UBGraphicsMediaItemDelegate.h
-
-
-SOURCES += src/domain/UBGraphicsScene.cpp \
- src/domain/UBGraphicsItemUndoCommand.cpp \
- src/domain/UBGraphicsTextItemUndoCommand.cpp \
- src/domain/UBGraphicsItemTransformUndoCommand.cpp \
- src/domain/UBGraphicsPixmapItem.cpp \
- src/domain/UBDocumentUndoCommand.cpp \
- src/domain/UBPageSizeUndoCommand.cpp \
- src/domain/UBGraphicsProxyWidget.cpp \
- src/domain/UBGraphicsWebView.cpp \
- src/domain/UBGraphicsSvgItem.cpp \
- src/domain/UBGraphicsPolygonItem.cpp \
- src/domain/UBItem.cpp \
- src/domain/UBGraphicsVideoItem.cpp \
- src/domain/UBGraphicsWidgetItem.cpp \
- src/domain/UBGraphicsPDFItem.cpp \
- src/domain/UBGraphicsTextItem.cpp \
- src/domain/UBResizableGraphicsItem.cpp \
- src/domain/UBGraphicsStroke.cpp \
- src/domain/UBGraphicsMediaItem.cpp \
- src/domain/UBAbstractUndoCommand.cpp \
- src/domain/ubgraphicsgroupcontaineritem.cpp \
- src/domain/ubgraphicsgroupcontaineritemdelegate.cpp \
- src/domain/UBGraphicsStrokesGroup.cpp
-
-SOURCES += src/domain/UBGraphicsItemDelegate.cpp \
- src/domain/UBGraphicsTextItemDelegate.cpp \
- src/domain/UBGraphicsMediaItemDelegate.cpp \
- src/domain/UBGraphicsDelegateFrame.cpp \
- src/domain/UBGraphicsWidgetItemDelegate.cpp \
-
+HEADERS += src/domain/UBGraphicsScene.h \
+ src/domain/UBGraphicsItemUndoCommand.h \
+ src/domain/UBGraphicsTextItemUndoCommand.h \
+ src/domain/UBGraphicsItemTransformUndoCommand.h \
+ src/domain/UBGraphicsPixmapItem.h \
+ src/domain/UBDocumentUndoCommand.h \
+ src/domain/UBPageSizeUndoCommand.h \
+ src/domain/UBGraphicsProxyWidget.h \
+ src/domain/UBGraphicsWebView.h \
+ src/domain/UBGraphicsSvgItem.h \
+ src/domain/UBGraphicsPolygonItem.h \
+ src/domain/UBItem.h \
+ src/domain/UBGraphicsWidgetItem.h \
+ src/domain/UBGraphicsPDFItem.h \
+ src/domain/UBGraphicsTextItem.h \
+ src/domain/UBResizableGraphicsItem.h \
+ src/domain/UBGraphicsStroke.h \
+ src/domain/UBGraphicsMediaItem.h \
+ src/domain/UBAbstractUndoCommand.h \
+ src/domain/UBGraphicsGroupContainerItem.h \
+ src/domain/UBGraphicsGroupContainerItemDelegate.h \
+ src/domain/UBGraphicsStrokesGroup.h \
+ src/domain/UBGraphicsItemGroupUndoCommand.h \
+ src/domain/UBGraphicsItemDelegate.h \
+ src/domain/UBGraphicsTextItemDelegate.h \
+ src/domain/UBGraphicsDelegateFrame.h \
+ src/domain/UBGraphicsWidgetItemDelegate.h \
+ src/domain/UBGraphicsMediaItemDelegate.h
+
+SOURCES += src/domain/UBGraphicsScene.cpp \
+ src/domain/UBGraphicsItemUndoCommand.cpp \
+ src/domain/UBGraphicsTextItemUndoCommand.cpp \
+ src/domain/UBGraphicsItemTransformUndoCommand.cpp \
+ src/domain/UBGraphicsPixmapItem.cpp \
+ src/domain/UBDocumentUndoCommand.cpp \
+ src/domain/UBPageSizeUndoCommand.cpp \
+ src/domain/UBGraphicsProxyWidget.cpp \
+ src/domain/UBGraphicsWebView.cpp \
+ src/domain/UBGraphicsSvgItem.cpp \
+ src/domain/UBGraphicsPolygonItem.cpp \
+ src/domain/UBItem.cpp \
+ src/domain/UBGraphicsVideoItem.cpp \
+ src/domain/UBGraphicsWidgetItem.cpp \
+ src/domain/UBGraphicsPDFItem.cpp \
+ src/domain/UBGraphicsTextItem.cpp \
+ src/domain/UBResizableGraphicsItem.cpp \
+ src/domain/UBGraphicsStroke.cpp \
+ src/domain/UBGraphicsMediaItem.cpp \
+ src/domain/UBAbstractUndoCommand.cpp \
+ src/domain/ubgraphicsgroupcontaineritem.cpp \
+ src/domain/ubgraphicsgroupcontaineritemdelegate.cpp \
+ src/domain/UBGraphicsStrokesGroup.cpp \
+ src/domain/UBGraphicsItemGroupUndoCommand.cpp \
+ src/domain/UBGraphicsItemDelegate.cpp \
+ src/domain/UBGraphicsTextItemDelegate.cpp \
+ src/domain/UBGraphicsMediaItemDelegate.cpp \
+ src/domain/UBGraphicsDelegateFrame.cpp \
+ src/domain/UBGraphicsWidgetItemDelegate.cpp
diff --git a/src/gui/UBFeaturesWidget.cpp b/src/gui/UBFeaturesWidget.cpp
index 85a41cad..78b4725e 100644
--- a/src/gui/UBFeaturesWidget.cpp
+++ b/src/gui/UBFeaturesWidget.cpp
@@ -379,6 +379,12 @@ void UBFeaturesListView::dragMoveEvent( QDragMoveEvent *event )
event->ignore();
return;
}
+ foreach (UBFeature curFeature, fMimeData->features()) {
+ if (curFeature == onFeature) {
+ event->ignore();
+ return;
+ }
+ }
}
if ( event->mimeData()->hasUrls() || event->mimeData()->hasImage() ) {
diff --git a/src/gui/UBTeacherGuideWidget.cpp b/src/gui/UBTeacherGuideWidget.cpp
index 2bec3d15..5322919a 100644
--- a/src/gui/UBTeacherGuideWidget.cpp
+++ b/src/gui/UBTeacherGuideWidget.cpp
@@ -879,17 +879,21 @@ void UBTeacherGuidePageZeroWidget::fillComboBoxes()
parametersFile.close();
QStringList licences;
- licences << tr("Attribution CC BY") << tr("Attribution-NoDerivs CC BY-ND")
+ licences << tr("Attribution CC BY")
+ << tr("Attribution-NoDerivs CC BY-ND")
<< tr("Attribution-ShareAlike CC BY-SA")
<< tr("Attribution-NonCommercial CC BY-NC")
<< tr("Attribution-NonCommercial-NoDerivs CC BY-NC-ND")
<< tr("Attribution-NonCommercial-ShareAlike CC BY-NC-SA")
- << tr("Public domain") << tr("Copyright");
+ << tr("Public domain")
+ << tr("Copyright");
mpLicenceBox->addItems(licences);
QStringList licenceIconList;
licenceIconList << ":images/licenses/ccby.png"
- << ":images/licenses/ccbynd.png" << ":images/licenses/ccbysa.png"
- << ":images/licenses/ccbync.png" << ":images/licenses/ccbyncnd.png"
+ << ":images/licenses/ccbynd.png"
+ << ":images/licenses/ccbysa.png"
+ << ":images/licenses/ccbync.png"
+ << ":images/licenses/ccbyncnd.png"
<< ":images/licenses/ccbyncsa.png";
for (int i = 0; i < licenceIconList.count(); i += 1)
mpLicenceBox->setItemData(i, licenceIconList.at(i));
@@ -945,7 +949,7 @@ void UBTeacherGuidePageZeroWidget::loadData()
currentIndex = mpSchoolTypeBox->findText(documentProxy->metaData(UBSettings::sessionType).toString());
mpSchoolTypeBox->setCurrentIndex((currentIndex != -1) ? currentIndex : 0);
- currentIndex = mpLicenceBox->findText(documentProxy->metaData(UBSettings::sessionLicence).toString());
+ currentIndex = documentProxy->metaData(UBSettings::sessionLicence).toInt();
mpLicenceBox->setCurrentIndex((currentIndex != -1) ? currentIndex : 0);
}
@@ -962,7 +966,7 @@ void UBTeacherGuidePageZeroWidget::persistData()
documentProxy->setMetaData(UBSettings::sessionGradeLevel, mpSchoolLevelBox->currentText());
documentProxy->setMetaData(UBSettings::sessionSubjects, mpSchoolSubjectsBox->currentText());
documentProxy->setMetaData(UBSettings::sessionType, mpSchoolTypeBox->currentText());
- documentProxy->setMetaData(UBSettings::sessionLicence, mpLicenceBox->currentText());
+ documentProxy->setMetaData(UBSettings::sessionLicence, mpLicenceBox->currentIndex());
}
}
@@ -1087,7 +1091,7 @@ QVector UBTeacherGuidePageZeroWidget::getData()
elementNode = new tUBGEElementNode();
elementNode->name = "licence";
- elementNode->attributes.insert("value", mpLicenceBox->currentText());
+ elementNode->attributes.insert("value", QString("%1").arg(mpLicenceBox->currentIndex()));
result << elementNode;
return result;
}