Merge remote-tracking branch 'upstream/develop' into aristo_tool

preferencesAboutTextFull
Yimgo 12 years ago
commit 87c04b92b5
  1. BIN
      JournalDesModifications.pdf
  2. BIN
      ReleaseNotes.pdf
  3. 2
      Sankore_3.1.pro
  4. 2
      plugins/cffadaptor/src/UBCFFAdaptor.cpp
  5. 4
      resources/library/applications/Grapheur.wgt/Grapheur.xhtml
  6. 4
      resources/library/applications/Sel video.wgt/css/main.css
  7. 2
      resources/library/applications/Sel video.wgt/index.html
  8. 6
      resources/library/interactivities/Calcul.wgt/i18n/Messages_fr.properties
  9. 31
      resources/library/interactivities/Contraste.wgt/locales/fr/scripts/blackYellow.js
  10. 31
      resources/library/interactivities/Contraste.wgt/locales/ru/scripts/blackYellow.js
  11. 29
      resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js
  12. 6
      resources/library/interactivities/Des.wgt/i18n/Messages_fr.properties
  13. 6
      resources/library/interactivities/Enveloppe.wgt/i18n/Messages_fr.properties
  14. 6
      resources/library/interactivities/Memory.wgt/i18n/Messages_fr.properties
  15. 1
      resources/library/interactivities/Ordre phrase.wgt/styles/of_puppets.css
  16. 2
      resources/library/interactivities/Selectionner.wgt/locales/fr/js/script.js
  17. 6
      resources/library/interactivities/Tables.wgt/i18n/Messages_fr.properties
  18. 6
      resources/library/interactivities/Train.wgt/i18n/Messages_fr.properties
  19. 6
      resources/library/interactivities/Transformation.wgt/i18n/Messages_fr.properties
  20. 8
      src/adaptors/UBCFFSubsetAdaptor.cpp
  21. 2
      src/api/UBWidgetUniboardAPI.cpp
  22. 29
      src/board/UBBoardController.cpp
  23. 4
      src/board/UBBoardPaletteManager.cpp
  24. 92
      src/board/UBBoardView.cpp
  25. 2
      src/board/UBBoardView.h
  26. 162
      src/board/UBFeaturesController.cpp
  27. 40
      src/board/UBFeaturesController.h
  28. 110
      src/core/UBApplication.cpp
  29. 4
      src/core/UBApplication.h
  30. 44
      src/desktop/UBDesktopAnnotationController.cpp
  31. 1
      src/desktop/UBDesktopAnnotationController.h
  32. 281
      src/document/UBDocumentController.cpp
  33. 3
      src/document/UBDocumentController.h
  34. 2
      src/domain/UBGraphicsDelegateFrame.cpp
  35. 53
      src/domain/UBGraphicsGroupContainerItem.cpp
  36. 5
      src/domain/UBGraphicsGroupContainerItem.h
  37. 22
      src/domain/UBGraphicsItemDelegate.cpp
  38. 1
      src/domain/UBGraphicsItemDelegate.h
  39. 20
      src/domain/UBGraphicsPolygonItem.cpp
  40. 213
      src/domain/UBGraphicsScene.cpp
  41. 24
      src/domain/UBGraphicsScene.h
  42. 61
      src/domain/UBGraphicsStrokesGroup.cpp
  43. 8
      src/domain/UBGraphicsStrokesGroup.h
  44. 9
      src/domain/UBGraphicsTextItemDelegate.cpp
  45. 1
      src/domain/UBGraphicsTextItemDelegate.h
  46. 43
      src/domain/UBItem.cpp
  47. 1
      src/domain/UBItem.h
  48. 46
      src/frameworks/UBCoreGraphicsScene.cpp
  49. 13
      src/frameworks/UBCoreGraphicsScene.h
  50. 5
      src/frameworks/UBPlatformUtils.h
  51. 30
      src/frameworks/UBPlatformUtils_mac.mm
  52. 8
      src/gui/UBFeaturesWidget.cpp
  53. 5
      src/gui/UBKeyboardPalette.cpp
  54. 18
      src/gui/UBKeyboardPalette_mac.cpp
  55. 2
      src/gui/UBPropertyPalette.cpp
  56. 2
      src/gui/UBPropertyPalette.h
  57. 11
      src/gui/UBTeacherGuideWidget.cpp
  58. 5
      src/gui/UBTeacherGuideWidget.h
  59. 9
      src/gui/UBTeacherGuideWidgetsTools.cpp
  60. 6
      src/gui/UBThumbnailWidget.cpp
  61. 3
      src/web/UBWebController.cpp
  62. 24
      src/web/browser/WBBrowserWindow.cpp

Binary file not shown.

Binary file not shown.

@ -11,7 +11,7 @@ CONFIG += debug_and_release \
VERSION_MAJ = 2
VERSION_MIN = 00
VERSION_TYPE = b # a = alpha, b = beta, r = release, other => error
VERSION_PATCH = 05
VERSION_PATCH = 06
VERSION = "$${VERSION_MAJ}.$${VERSION_MIN}.$${VERSION_TYPE}.$${VERSION_PATCH}"
VERSION = $$replace(VERSION, "\\.r", "")

@ -858,7 +858,7 @@ bool UBCFFAdaptor::UBToCFFConverter::itIsSupportedFormat(const QString &format)
QStringList tsl = format.split(".", QString::SkipEmptyParts);
if (0 < tsl.count())
bRet = cffSupportedFileFormats.contains(tsl.at(tsl.count()-1));
bRet = cffSupportedFileFormats.contains(tsl.at(tsl.count()-1).toLower());
else
bRet = false;

@ -218,7 +218,6 @@
return true;
});
$("label[for*='checkAire']").text(sankoreLang[lang].draw);
$("label[for*='checkMaJ']").text(sankoreLang[lang].auto_update);
$("#menuOptions td").eq(0).html(sankoreLang[lang].widget);
$("#menuOptions h3").eq(0).text(sankoreLang[lang].widget_options);
$("#menuOptions2D h3").eq(0).text(sankoreLang[lang].options + " 2D");
@ -1033,13 +1032,10 @@
<span class="gras">Control options:</span><br/>
<input type="button" class="boutonSauvegarde" onclick="saveOptions()" value="Save"/><input type="button" class="boutonSauvegarde" onclick="loadOptions()" value="Load"/> <input class="boutonSauvegarde2" type="button" onclick="delOptions()" value="Delete"/><input class="boutonSauvegarde2" type="button" onclick="alertOptions()" value="Display"/><br/>
<span class="texteSecondaire">Save a widget options in cookies or load an options from cookies or delete a registered options.</span>
<br/><br/>
<label for="checkMaJ">Automatically update when a widget opening.</label> <input type="checkbox" id="checkMaJ" onclick="checkboxMaJ()"/>
<br/>
<div id="cacheCookies"><br/><br/><h1>Cookies are disabled. You cannot save an options...</h1></div>
<div id="cacheMaJ">You are using the last version of this widget.</div>
<input type="button" onclick='reset()' value="Reload widget" style="position:absolute; bottom:20px; width:140px; height:32px;"/>
<input type="button" onclick='miseAjour()' value="Updated" style="position:absolute; bottom:20px; left:160px; width:140px; height:32px;"/>
</div>
<div class="barreBasMenu"><input type="button" onclick="cacherMenu(); actualiserGraph()" value="Check"/></div>
</div>

@ -1,7 +1,6 @@
body{
margin-top:10px;
margin-left:10px;
margin: 0;
font-family:Arial, Sans-serif;
font-size:15px;
color:#444;
@ -104,7 +103,6 @@ body{
}
#embeded-content{
border:1px solid rgb(230,230,230);
position:relative;
z-index:3;
float:left;

@ -143,7 +143,7 @@
top:($("#embeded-content").children(":first").height()-35)/2
});
adaptWidgetSize(5, 13);
adaptWidgetSize(3, 0);
return false;
};

@ -1,11 +1,11 @@
fr.njin.i18n.document.title = Calcul rapide
fr.njin.i18n.toolbar.edit = Editer
fr.njin.i18n.toolbar.view = Fermer
fr.njin.i18n.toolbar.edit = Modifier
fr.njin.i18n.toolbar.view = Editer
fr.njin.i18n.toolbar.reload = Recharger
fr.njin.i18n.toolbar.help = Aide
fr.njin.i18n.parameters.label.themes = Thème
fr.njin.i18n.parameters.label.themes = Thèmes
fr.njin.i18n.parameters.label.slate.themes = ardoise
fr.njin.i18n.parameters.label.pad.themes = tablette
fr.njin.i18n.parameters.label.none.themes = aucun

@ -326,6 +326,15 @@ function init(){
$(".closeItem").live("click", function(){
if(!shadowOver){
$(this).parent().remove();
if($(".editContainer").size() > 0){
var prev = $(".editContainer:first");
if((prev.position().left == 54) && (prev.position().top != 60))
prev.css("top", "60px");
var prevBottom = prev.position().top + prev.height(),
prevLeft = prev.position().left;
if(prev.next().length)
recursionCall(prevBottom, prevLeft, prev.next());
}
}
});
@ -339,8 +348,7 @@ function init(){
})
function recursionCall(prevBottom, prevLeft, curr){
var curTop = curr.position().top,
curHeight = curr.height(),
var curHeight = curr.height(),
curLeft = curr.position().left;
if(prevLeft == curLeft){
if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
@ -351,7 +359,7 @@ function init(){
if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
curr.css("top", prevBottom + 15 + "px").css("left", prevLeft + "px");
else
curr.css("top", "60px");
curr.css("top", "60px").css("left", prevLeft + 255 + "px");
}
prevBottom = curr.position().top + curr.height(),
prevLeft = curr.position().left;
@ -364,7 +372,20 @@ function init(){
popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%");
$(window).resize(function(){
//$("#leftDiv,#rightDiv,#shadowDiv").css("height", $(window).height());
if($("#wgt_edit").hasClass("selected")){
if($(".editContainer").size() > 1){
var prev = $(".editContainer:first"),
prevBottom = prev.position().top + prev.height(),
prevLeft = prev.position().left;
recursionCall(prevBottom, prevLeft, prev.next());
}
} else {
var tmp_array = [];
$(".readyTask").each(function(){
tmp_array.push($(this));
});
orderItems(tmp_array);
}
popupBack.css("top", ($(window).height() - 138)*50/$(window).height() + "%");
popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%");
});
@ -564,4 +585,4 @@ function changeStyle(val){
}
if($("#wgt_edit").hasClass("selected"))
$(document).enableTextSelect();
}
}

@ -326,6 +326,15 @@ function init(){
$(".closeItem").live("click", function(){
if(!shadowOver){
$(this).parent().remove();
if($(".editContainer").size() > 0){
var prev = $(".editContainer:first");
if((prev.position().left == 54) && (prev.position().top != 60))
prev.css("top", "60px");
var prevBottom = prev.position().top + prev.height(),
prevLeft = prev.position().left;
if(prev.next().length)
recursionCall(prevBottom, prevLeft, prev.next());
}
}
});
@ -339,8 +348,7 @@ function init(){
})
function recursionCall(prevBottom, prevLeft, curr){
var curTop = curr.position().top,
curHeight = curr.height(),
var curHeight = curr.height(),
curLeft = curr.position().left;
if(prevLeft == curLeft){
if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
@ -351,7 +359,7 @@ function init(){
if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
curr.css("top", prevBottom + 15 + "px").css("left", prevLeft + "px");
else
curr.css("top", "60px");
curr.css("top", "60px").css("left", prevLeft + 255 + "px");
}
prevBottom = curr.position().top + curr.height(),
prevLeft = curr.position().left;
@ -364,7 +372,20 @@ function init(){
popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%");
$(window).resize(function(){
//$("#leftDiv,#rightDiv,#shadowDiv").css("height", $(window).height());
if($("#wgt_edit").hasClass("selected")){
if($(".editContainer").size() > 1){
var prev = $(".editContainer:first"),
prevBottom = prev.position().top + prev.height(),
prevLeft = prev.position().left;
recursionCall(prevBottom, prevLeft, prev.next());
}
} else {
var tmp_array = [];
$(".readyTask").each(function(){
tmp_array.push($(this));
});
orderItems(tmp_array);
}
popupBack.css("top", ($(window).height() - 138)*50/$(window).height() + "%");
popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%");
});
@ -564,4 +585,4 @@ function changeStyle(val){
}
if($("#wgt_edit").hasClass("selected"))
$(document).enableTextSelect();
}
}

@ -326,6 +326,15 @@ function init(){
$(".closeItem").live("click", function(){
if(!shadowOver){
$(this).parent().remove();
if($(".editContainer").size() > 0){
var prev = $(".editContainer:first");
if((prev.position().left == 54) && (prev.position().top != 60))
prev.css("top", "60px");
var prevBottom = prev.position().top + prev.height(),
prevLeft = prev.position().left;
if(prev.next().length)
recursionCall(prevBottom, prevLeft, prev.next());
}
}
});
@ -339,8 +348,7 @@ function init(){
})
function recursionCall(prevBottom, prevLeft, curr){
var curTop = curr.position().top,
curHeight = curr.height(),
var curHeight = curr.height(),
curLeft = curr.position().left;
if(prevLeft == curLeft){
if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
@ -351,7 +359,7 @@ function init(){
if((prevBottom + 15 + curHeight) < ($(window).height() - 54))
curr.css("top", prevBottom + 15 + "px").css("left", prevLeft + "px");
else
curr.css("top", "60px");
curr.css("top", "60px").css("left", prevLeft + 255 + "px");
}
prevBottom = curr.position().top + curr.height(),
prevLeft = curr.position().left;
@ -364,7 +372,20 @@ function init(){
popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%");
$(window).resize(function(){
//$("#leftDiv,#rightDiv,#shadowDiv").css("height", $(window).height());
if($("#wgt_edit").hasClass("selected")){
if($(".editContainer").size() > 1){
var prev = $(".editContainer:first"),
prevBottom = prev.position().top + prev.height(),
prevLeft = prev.position().left;
recursionCall(prevBottom, prevLeft, prev.next());
}
} else {
var tmp_array = [];
$(".readyTask").each(function(){
tmp_array.push($(this));
});
orderItems(tmp_array);
}
popupBack.css("top", ($(window).height() - 138)*50/$(window).height() + "%");
popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%");
});

@ -1,11 +1,11 @@
fr.njin.i18n.document.title = Dés
fr.njin.i18n.toolbar.edit = Editer
fr.njin.i18n.toolbar.view = Fermer
fr.njin.i18n.toolbar.edit = Modifier
fr.njin.i18n.toolbar.view = Afficher
fr.njin.i18n.toolbar.reload = Recharger
fr.njin.i18n.toolbar.help = Aide
fr.njin.i18n.parameters.label.themes = Thème
fr.njin.i18n.parameters.label.themes = Thèmes
fr.njin.i18n.parameters.label.slate.themes = ardoise
fr.njin.i18n.parameters.label.pad.themes = tablette
fr.njin.i18n.parameters.label.none.themes = aucun

@ -1,11 +1,11 @@
fr.njin.i18n.document.title = Enveloppe
fr.njin.i18n.toolbar.edit = Editer
fr.njin.i18n.toolbar.view = Fermer
fr.njin.i18n.toolbar.edit = Modifier
fr.njin.i18n.toolbar.view = Afficher
fr.njin.i18n.toolbar.reload = Recharger
fr.njin.i18n.toolbar.help = Aide
fr.njin.i18n.parameters.label.themes = Thème
fr.njin.i18n.parameters.label.themes = Thèmes
fr.njin.i18n.parameters.label.slate.themes = ardoise
fr.njin.i18n.parameters.label.pad.themes = tablette
fr.njin.i18n.parameters.label.none.themes = aucun

@ -1,11 +1,11 @@
fr.njin.i18n.document.title = Memory
fr.njin.i18n.toolbar.edit = Editer
fr.njin.i18n.toolbar.view = Fermer
fr.njin.i18n.toolbar.edit = Modifier
fr.njin.i18n.toolbar.view = Afficher
fr.njin.i18n.toolbar.reload = Recharger
fr.njin.i18n.toolbar.help = Aide
fr.njin.i18n.parameters.label.themes = Thème
fr.njin.i18n.parameters.label.themes = Thèmes
fr.njin.i18n.parameters.label.slate.themes = ardoise
fr.njin.i18n.parameters.label.pad.themes = tablette
fr.njin.i18n.parameters.label.none.themes = aucun

@ -33,7 +33,6 @@ body{
font: 28px tahoma;
text-align: center;
cursor: pointer;
text-transform: uppercase;
overflow: hidden;
}

@ -3,7 +3,7 @@ var sankoreLang = {
edit: "Modifier",
short_desc: "Sélectionner les animaux dans la liste suivante :",
add: "Nouveau bloc",
enter: "Saisir votre consigne ici ...",
enter: "Texte",
cat: "chat",
ball: "balle",
shovel: "pelle",

@ -1,11 +1,11 @@
fr.njin.i18n.document.title = Tables
fr.njin.i18n.toolbar.edit = Editer
fr.njin.i18n.toolbar.view = Fermer
fr.njin.i18n.toolbar.edit = Modifier
fr.njin.i18n.toolbar.view = Afficher
fr.njin.i18n.toolbar.reload = Recharger
fr.njin.i18n.toolbar.help = Aide
fr.njin.i18n.parameters.label.themes = Thème
fr.njin.i18n.parameters.label.themes = Thèmes
fr.njin.i18n.parameters.label.slate.themes = ardoise
fr.njin.i18n.parameters.label.pad.themes = tablette
fr.njin.i18n.parameters.label.none.themes = aucun

@ -1,11 +1,11 @@
fr.njin.i18n.document.title = Le train
fr.njin.i18n.toolbar.edit = Editer
fr.njin.i18n.toolbar.view = Fermer
fr.njin.i18n.toolbar.edit = Modifier
fr.njin.i18n.toolbar.view = Afficher
fr.njin.i18n.toolbar.reload = Recharger
fr.njin.i18n.toolbar.help = Aide
fr.njin.i18n.parameters.label.themes = Thème
fr.njin.i18n.parameters.label.themes = Thèmes
fr.njin.i18n.parameters.label.slate.themes = ardoise
fr.njin.i18n.parameters.label.pad.themes = tablette
fr.njin.i18n.parameters.label.none.themes = aucun

@ -1,11 +1,11 @@
fr.njin.i18n.document.title = Boîte à transformation
fr.njin.i18n.toolbar.edit = Editer
fr.njin.i18n.toolbar.view = Fermer
fr.njin.i18n.toolbar.edit = Modifier
fr.njin.i18n.toolbar.view = Afficher
fr.njin.i18n.toolbar.reload = Recharger
fr.njin.i18n.toolbar.help = Aide
fr.njin.i18n.parameters.label.themes = Thème
fr.njin.i18n.parameters.label.themes = Thèmes
fr.njin.i18n.parameters.label.slate.themes = ardoise
fr.njin.i18n.parameters.label.pad.themes = tablette
fr.njin.i18n.parameters.label.none.themes = aucun

@ -174,9 +174,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseGSection(const QDomElement &ele
QDomElement currentSvgElement = element.firstChildElement();
while (!currentSvgElement.isNull()) {
if (!parseSvgElement(currentSvgElement))
return false;
parseSvgElement(currentSvgElement);
currentSvgElement = currentSvgElement.nextSiblingElement();
}
@ -187,8 +185,8 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseGSection(const QDomElement &ele
else
{
delete mGSectionContainer;
mGSectionContainer = NULL;
}
mGSectionContainer = NULL;
return true;
}
@ -1189,8 +1187,6 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::persistScenes()
UBGraphicsScene *tmpScene = UBSvgSubsetAdaptor::loadScene(mProxy, i);
tmpScene->setModified(true);
UBThumbnailAdaptor::persistScene(mProxy, tmpScene, i);
delete tmpScene;
mCurrentScene->setModified(false);
}

@ -250,7 +250,7 @@ void UBWidgetUniboardAPI::eraseLineTo(const qreal x, const qreal y, const qreal
void UBWidgetUniboardAPI::clear()
{
if (mScene)
mScene->clearItemsAndAnnotations();
mScene->clearContent(UBGraphicsScene::clearItemsAndAnnotations);
}

@ -553,15 +553,15 @@ void UBBoardController::duplicateItem(UBItem *item)
qreal shifting = UBSettings::settings()->objectFrameWidth;
itemPos = commonItem->pos() + QPointF(shifting,shifting);
itemSize = commonItem->boundingRect().size();
commonItem->setSelected(false);
}
UBMimeType::Enum itemMimeType;
QString contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(item->sourceUrl().toLocalFile());
if(NULL != qgraphicsitem_cast<UBGraphicsGroupContainerItem*>(commonItem)){
itemMimeType = UBMimeType::Group;
}else{
itemMimeType = UBFileSystemUtils::mimeTypeFromString(contentTypeHeader);
}
if(NULL != qgraphicsitem_cast<UBGraphicsGroupContainerItem*>(commonItem))
itemMimeType = UBMimeType::Group;
else
itemMimeType = UBFileSystemUtils::mimeTypeFromString(contentTypeHeader);
switch(static_cast<int>(itemMimeType))
{
@ -633,10 +633,10 @@ void UBBoardController::duplicateItem(UBItem *item)
QGraphicsItem *gitem = dynamic_cast<QGraphicsItem*>(item->deepCopy());
if (gitem)
{
qDebug() << "Adding a stroke: " << gitem;
mActiveScene->addItem(gitem);
gitem->setPos(itemPos);
mLastCreatedItem = gitem;
gitem->setSelected(true);
}
return;
}break;
@ -683,7 +683,7 @@ void UBBoardController::clearScene()
if (mActiveScene)
{
freezeW3CWidgets(true);
mActiveScene->clearItemsAndAnnotations();
mActiveScene->clearContent(UBGraphicsScene::clearItemsAndAnnotations);
updateActionStates();
}
}
@ -694,7 +694,7 @@ void UBBoardController::clearSceneItems()
if (mActiveScene)
{
freezeW3CWidgets(true);
mActiveScene->clearItems();
mActiveScene->clearContent(UBGraphicsScene::clearItems);
updateActionStates();
}
}
@ -704,7 +704,7 @@ void UBBoardController::clearSceneAnnotation()
{
if (mActiveScene)
{
mActiveScene->clearAnnotations();
mActiveScene->clearContent(UBGraphicsScene::clearAnnotations);
updateActionStates();
}
}
@ -713,7 +713,7 @@ void UBBoardController::clearSceneBackground()
{
if (mActiveScene)
{
mActiveScene->clearBackground();
mActiveScene->clearContent(UBGraphicsScene::clearBackground);
updateActionStates();
}
}
@ -1487,11 +1487,12 @@ void UBBoardController::ClearUndoStack()
UBGraphicsItemUndoCommand *cmd = (UBGraphicsItemUndoCommand*)UBApplication::undoStack->command(i);
// go through all added and removed objects, for create list of unique objects
// grouped items will be deleted by groups, so we don't need do delete that items.
QSetIterator<QGraphicsItem*> itAdded(cmd->GetAddedList());
while (itAdded.hasNext())
{
QGraphicsItem* item = itAdded.next();
if( !uniqueItems.contains(item) )
if( !uniqueItems.contains(item) && !(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type()))
uniqueItems.insert(item);
}
@ -1499,7 +1500,7 @@ void UBBoardController::ClearUndoStack()
while (itRemoved.hasNext())
{
QGraphicsItem* item = itRemoved.next();
if( !uniqueItems.contains(item) )
if( !uniqueItems.contains(item) && !(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type()))
uniqueItems.insert(item);
}
}
@ -1520,7 +1521,8 @@ void UBBoardController::ClearUndoStack()
}
if(!scene)
{
mActiveScene->deleteItem(item);
if (!mActiveScene->deleteItem(item))
delete item;
}
}
@ -1554,7 +1556,6 @@ void UBBoardController::changeBackground(bool isDark, bool isCrossed)
}
}
void UBBoardController::boardViewResized(QResizeEvent* event)
{
Q_UNUSED(event);

@ -710,9 +710,7 @@ void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool is
mLeftPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
mRightPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
mStylusPalette->raise();
// Maybe threre is a reason to keep that functions but with them right palette in desktop mode is not interactable
// mRightPalette->lower();
// mLeftPalette->lower();
if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
{

@ -55,6 +55,8 @@
#include "document/UBDocumentProxy.h"
#include "tools/UBGraphicsRuler.h"
#include "tools/UBGraphicsCurtainItem.h"
#include "tools/UBGraphicsCompass.h"
#include "tools/UBGraphicsCache.h"
#include "tools/UBGraphicsTriangle.h"
@ -74,6 +76,7 @@ UBBoardView::UBBoardView (UBBoardController* pController, QWidget* pParent, bool
, mIsDragInProgress(false)
, mMultipleSelectionIsEnabled(false)
, isControl(pIsControl)
, mRubberBandInPlayMode(false) //enables rubberband with play tool
{
init ();
@ -434,6 +437,15 @@ bool UBBoardView::itemHaveParentWithType(QGraphicsItem *item, int type)
return itemHaveParentWithType(item->parentItem(), type);
}
bool UBBoardView::isUBItem(QGraphicsItem *item)
{
if ((UBGraphicsItemType::UserTypesCount > item->type()) && (item->type() > QGraphicsItem::UserType))
return true;
else
{
return false;
}
}
void UBBoardView::handleItemsSelection(QGraphicsItem *item)
{
@ -505,11 +517,20 @@ Here we determines cases when items should to get mouse press event at pressing
switch(item->type())
{
case UBGraphicsProtractor::Type:
case UBGraphicsRuler::Type:
case UBGraphicsTriangle::Type:
case UBGraphicsCompass::Type:
case UBGraphicsCache::Type:
return true;
case UBGraphicsDelegateFrame::Type:
case QGraphicsSvgItem::Type:
return true;
case DelegateButton::Type:
return true;
case UBGraphicsMediaItem::Type:
return false;
@ -534,7 +555,12 @@ Here we determines cases when items should to get mouse press event at pressing
return false;
break;
case UBToolWidget::Type:
return true;
case QGraphicsWebView::Type:
return true;
case UBGraphicsWidgetItem::Type:
if (currentTool == UBStylusTool::Selector && item->parentItem() && item->parentItem()->isSelected())
return true;
@ -542,10 +568,11 @@ Here we determines cases when items should to get mouse press event at pressing
return true;
if (currentTool == UBStylusTool::Play)
return true;
return false;
break;
}
return false;
return !isUBItem(item); // standard behavior of QGraphicsScene for not UB items. UB items should be managed upper.
}
bool UBBoardView::itemShouldReceiveSuspendedMousePressEvent(QGraphicsItem *item)
@ -557,9 +584,11 @@ bool UBBoardView::itemShouldReceiveSuspendedMousePressEvent(QGraphicsItem *item)
return false;
UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool();
switch(item->type())
{
case QGraphicsWebView::Type:
return false;
case UBGraphicsPixmapItem::Type:
case UBGraphicsTextItem::Type:
case UBGraphicsWidgetItem::Type:
@ -599,6 +628,7 @@ bool UBBoardView::itemShouldBeMoved(QGraphicsItem *item)
switch(item->type())
{
case UBGraphicsCurtainItem::Type:
case UBGraphicsGroupContainerItem::Type:
return true;
@ -994,38 +1024,41 @@ UBBoardView::mouseMoveEvent (QMouseEvent *event)
return;
}
if (!movingItem && (mMouseButtonIsPressed || mTabletStylusIsPressed) && mUBRubberBand && mUBRubberBand->isVisible()) {
if (currentTool != UBStylusTool::Play || mRubberBandInPlayMode) {
QRect bandRect(mMouseDownPos, event->pos());
if (!movingItem && (mMouseButtonIsPressed || mTabletStylusIsPressed) && mUBRubberBand && mUBRubberBand->isVisible()) {
bandRect = bandRect.normalized();
QRect bandRect(mMouseDownPos, event->pos());
mUBRubberBand->setGeometry(bandRect);
bandRect = bandRect.normalized();
QList<QGraphicsItem *> rubberItems = items(bandRect);
foreach (QGraphicsItem *item, mJustSelectedItems) {
if (!rubberItems.contains(item)) {
item->setSelected(false);
mJustSelectedItems.remove(item);
}
}
if (currentTool == UBStylusTool::Selector)
foreach (QGraphicsItem *item, items(bandRect)) {
mUBRubberBand->setGeometry(bandRect);
if (item->type() == UBGraphicsW3CWidgetItem::Type
|| item->type() == UBGraphicsPixmapItem::Type
|| item->type() == UBGraphicsMediaItem::Type
|| item->type() == UBGraphicsSvgItem::Type
|| item->type() == UBGraphicsTextItem::Type
|| item->type() == UBGraphicsStrokesGroup::Type
|| item->type() == UBGraphicsGroupContainerItem::Type) {
if (!mJustSelectedItems.contains(item)) {
item->setSelected(true);
mJustSelectedItems.insert(item);
QList<QGraphicsItem *> rubberItems = items(bandRect);
foreach (QGraphicsItem *item, mJustSelectedItems) {
if (!rubberItems.contains(item)) {
item->setSelected(false);
mJustSelectedItems.remove(item);
}
}
if (currentTool == UBStylusTool::Selector)
foreach (QGraphicsItem *item, items(bandRect)) {
if (item->type() == UBGraphicsW3CWidgetItem::Type
|| item->type() == UBGraphicsPixmapItem::Type
|| item->type() == UBGraphicsMediaItem::Type
|| item->type() == UBGraphicsSvgItem::Type
|| item->type() == UBGraphicsTextItem::Type
|| item->type() == UBGraphicsStrokesGroup::Type
|| item->type() == UBGraphicsGroupContainerItem::Type) {
if (!mJustSelectedItems.contains(item)) {
item->setSelected(true);
mJustSelectedItems.insert(item);
}
}
}
}
}
@ -1092,9 +1125,12 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event)
}
else
{
if (QGraphicsSvgItem::Type != movingItem->type() &&
if (isUBItem(movingItem) &&
DelegateButton::Type != movingItem->type() &&
QGraphicsSvgItem::Type != movingItem->type() &&
UBGraphicsDelegateFrame::Type != movingItem->type() &&
UBToolWidget::Type != movingItem->type() &&
UBGraphicsCache::Type != movingItem->type() &&
QGraphicsWebView::Type != movingItem->type() && // for W3C widgets as Tools.
!(!isMultipleSelectionEnabled() && movingItem->parentItem() && UBGraphicsWidgetItem::Type == movingItem->type() && UBGraphicsGroupContainerItem::Type == movingItem->parentItem()->type()))
{

@ -57,6 +57,7 @@ class UBBoardView : public QGraphicsView
protected:
bool itemIsLocked(QGraphicsItem *item);
bool isUBItem(QGraphicsItem *item); // we should to determine items who is not UB and use general scene behavior for them.
void handleItemsSelection(QGraphicsItem *item);
bool itemShouldReceiveMousePressEvent(QGraphicsItem *item);
bool itemShouldReceiveSuspendedMousePressEvent(QGraphicsItem *item);
@ -153,6 +154,7 @@ class UBBoardView : public QGraphicsView
bool mIsDragInProgress;
bool mMultipleSelectionIsEnabled;
bool isControl;
bool mRubberBandInPlayMode;
static bool hasSelectedParents(QGraphicsItem * item);

@ -20,10 +20,22 @@
#include "gui/UBFeaturesWidget.h"
const QString UBFeaturesController::virtualRootName = "root";
const QString UBFeaturesController::rootPath = "/" + virtualRootName;
const QString UBFeaturesController::appPath = rootPath + "/Applications";
const QString UBFeaturesController::audiosPath = rootPath + "/Audios";
const QString UBFeaturesController::moviesPath = rootPath + "/Movies";
const QString UBFeaturesController::picturesPath = rootPath + "/Pictures";
const QString UBFeaturesController::flashPath = rootPath + "/Animations";
const QString UBFeaturesController::interactPath = rootPath + "/Interactivities";
const QString UBFeaturesController::shapesPath = rootPath + "/Shapes";
const QString UBFeaturesController::trashPath = rootPath + "/Trash";
const QString UBFeaturesController::favoritePath = rootPath + "/Favorites";
const QString UBFeaturesController::webSearchPath = rootPath + "/Web search";
void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString & currVirtualPath, const QSet<QUrl> &pFavoriteSet)
{
Q_ASSERT(QFileInfo(currentPath.toLocalFile()).exists());
QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(currentPath.toLocalFile());
@ -43,7 +55,7 @@ void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString &
if ( fullFileName.contains(".thumbnail."))
continue;
UBFeature testFeature(currVirtualPath, icon, fileName, QUrl::fromLocalFile(fullFileName), featureType);
UBFeature testFeature(currVirtualPath + "/" + fileName, icon, fileName, QUrl::fromLocalFile(fullFileName), featureType);
emit sendFeature(testFeature);
emit featureSent();
@ -51,7 +63,7 @@ void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString &
if ( pFavoriteSet.find(QUrl::fromLocalFile(fullFileName)) != pFavoriteSet.end()) {
//TODO send favoritePath from the controller or make favoritePath public and static
emit sendFeature(UBFeature( "/root/Favorites", icon, fileName, QUrl::fromLocalFile(fullFileName), featureType));
emit sendFeature(UBFeature( UBFeaturesController::favoritePath + "/" + fileName, icon, fileName, QUrl::fromLocalFile(fullFileName), featureType));
}
if (featureType == FEATURE_FOLDER) {
@ -60,16 +72,16 @@ void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString &
}
}
void UBFeaturesComputingThread::scanAll(QList<QPair<QUrl, QString> > pScanningData, const QSet<QUrl> &pFavoriteSet)
void UBFeaturesComputingThread::scanAll(QList<QPair<QUrl, UBFeature> > pScanningData, const QSet<QUrl> &pFavoriteSet)
{
for (int i = 0; i < pScanningData.count(); i++) {
if (abort) {
return;
}
QPair<QUrl, QString> curPair = pScanningData.at(i);
QPair<QUrl, UBFeature> curPair = pScanningData.at(i);
emit scanCategory(UBFeaturesController::categoryNameForVirtualPath(curPair.second));
scanFS(curPair.first, curPair.second, pFavoriteSet);
emit scanCategory(curPair.second.getDisplayName());
scanFS(curPair.first, curPair.second.getFullVirtualPath(), pFavoriteSet);
}
}
@ -96,11 +108,11 @@ int UBFeaturesComputingThread::featuresCount(const QUrl &pPath)
return noItems;
}
int UBFeaturesComputingThread::featuresCountAll(QList<QPair<QUrl, QString> > pScanningData)
int UBFeaturesComputingThread::featuresCountAll(QList<QPair<QUrl, UBFeature> > pScanningData)
{
int noItems = 0;
for (int i = 0; i < pScanningData.count(); i++) {
QPair<QUrl, QString> curPair = pScanningData.at(i);
QPair<QUrl, UBFeature> curPair = pScanningData.at(i);
noItems += featuresCount(curPair.first);
}
@ -114,7 +126,7 @@ QThread(parent)
abort = false;
}
void UBFeaturesComputingThread::compute(const QList<QPair<QUrl, QString> > &pScanningData, QSet<QUrl> *pFavoritesSet)
void UBFeaturesComputingThread::compute(const QList<QPair<QUrl, UBFeature> > &pScanningData, QSet<QUrl> *pFavoritesSet)
{
QMutexLocker curLocker(&mMutex);
@ -135,7 +147,7 @@ void UBFeaturesComputingThread::run()
qDebug() << "Custom thread started execution";
mMutex.lock();
QList<QPair<QUrl, QString> > searchData = mScanningData;
QList<QPair<QUrl, UBFeature> > searchData = mScanningData;
QSet<QUrl> favoriteSet = mFavoriteSet;
mMutex.unlock();
@ -182,14 +194,42 @@ UBFeaturesComputingThread::~UBFeaturesComputingThread()
}
UBFeature::UBFeature(const QString &url, const QImage &icon, const QString &name, const QUrl &realPath, UBFeatureElementType type)
: virtualDir(url), mThumbnail(icon), mName(name), mPath(realPath), elementType(type)
: mThumbnail(icon), mDisplayName(name), mPath(realPath), elementType(type)
{
mName = getNameFromVirtualPath(url);
virtualDir = getVirtualDirFromVirtualPath(url);
}
UBFeature::~UBFeature()
{
}
QString UBFeature::getNameFromVirtualPath(const QString &pVirtPath)
{
QString result;
int slashPos = pVirtPath.lastIndexOf("/");
if (slashPos != -1) {
result = pVirtPath.right(pVirtPath.count() - slashPos - 1);
} else {
qDebug() << "UBFeature: incorrect virtual path parameter specified";
}
return result;
}
QString UBFeature::getVirtualDirFromVirtualPath(const QString &pVirtPath)
{
QString result;
int slashPos = pVirtPath.lastIndexOf("/");
if (slashPos != -1) {
result = pVirtPath.left(slashPos);
} else {
qDebug() << "UBFeature: incorrect virtual path parameter specified";
}
return result;
}
QString UBFeature::getUrl() const
{
if ( elementType == FEATURE_INTERNAL )
@ -233,20 +273,6 @@ UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) :
,featuresList(0)
,mLastItemOffsetIndex(0)
{
//Initializing virtual structure of the list
rootPath = "/" + virtualRootName;
appPath = rootPath + "/Applications";
audiosPath = rootPath + "/Audios";
moviesPath = rootPath + "/Movies";
picturesPath = rootPath + "/Pictures";
flashPath = rootPath + "/Animations";
interactPath = rootPath + "/Interactivities";
shapesPath = rootPath + "/Shapes";
trashPath = rootPath + "/Trash";
favoritePath = rootPath + "/Favorites";
webSearchPath = rootPath + "/Web search";
//Initializing physical directories from UBSettings
mUserAudioDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userAudioDirectory());
mUserVideoDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userVideoDirectory());
@ -264,18 +290,18 @@ UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) :
mLibSearchDirectoryPath =QUrl::fromLocalFile(UBSettings::settings()->userSearchDirectory());
trashDirectoryPath = QUrl::fromLocalFile(UBSettings::userTrashDirPath());
rootElement = UBFeature(QString(), QImage( ":images/libpalette/home.png" ), "root", QUrl());
audiosElement = UBFeature( rootPath, QImage(":images/libpalette/AudiosCategory.svg"), tr("Audios") , mUserAudioDirectoryPath, FEATURE_CATEGORY);
moviesElement = UBFeature( rootPath, QImage(":images/libpalette/MoviesCategory.svg"), tr("Movies") , mUserVideoDirectoryPath, FEATURE_CATEGORY);
picturesElement = UBFeature( rootPath, QImage(":images/libpalette/PicturesCategory.svg"), tr("Pictures") , mUserPicturesDirectoryPath, FEATURE_CATEGORY);
flashElement = UBFeature( rootPath, QImage(":images/libpalette/FlashCategory.svg"), tr("Animations") , mUserAnimationDirectoryPath, FEATURE_CATEGORY);
interactElement = UBFeature( rootPath, QImage(":images/libpalette/InteractivesCategory.svg"), tr("Interactivities") , mLibInteractiveDirectoryPath, FEATURE_CATEGORY);
applicationsElement = UBFeature( rootPath, QImage(":images/libpalette/ApplicationsCategory.svg"), tr("Applications") , mUserInteractiveDirectoryPath, FEATURE_CATEGORY);
shapesElement = UBFeature( rootPath, QImage(":images/libpalette/ShapesCategory.svg"), tr("Shapes") , mLibShapesDirectoryPath, FEATURE_CATEGORY );
favoriteElement = UBFeature( rootPath, QImage(":images/libpalette/FavoritesCategory.svg"), tr("Favorites"), QUrl("favorites"), FEATURE_FAVORITE );
webSearchElement = UBFeature( rootPath, QImage(":images/libpalette/WebSearchCategory.svg"), tr("Web search"), mLibSearchDirectoryPath, FEATURE_CATEGORY);
rootElement = UBFeature(rootPath, QImage( ":images/libpalette/home.png" ), "root", QUrl());
audiosElement = UBFeature( audiosPath, QImage(":images/libpalette/AudiosCategory.svg"), tr("Audios") , mUserAudioDirectoryPath, FEATURE_CATEGORY);
moviesElement = UBFeature( moviesPath, QImage(":images/libpalette/MoviesCategory.svg"), tr("Movies") , mUserVideoDirectoryPath, FEATURE_CATEGORY);
picturesElement = UBFeature( picturesPath, QImage(":images/libpalette/PicturesCategory.svg"), tr("Pictures") , mUserPicturesDirectoryPath, FEATURE_CATEGORY);
flashElement = UBFeature( flashPath, QImage(":images/libpalette/FlashCategory.svg"), tr("Animations") , mUserAnimationDirectoryPath, FEATURE_CATEGORY);
interactElement = UBFeature( interactPath, QImage(":images/libpalette/InteractivesCategory.svg"), tr("Interactivities") , mLibInteractiveDirectoryPath, FEATURE_CATEGORY);
applicationsElement = UBFeature( appPath, QImage(":images/libpalette/ApplicationsCategory.svg"), tr("Applications") , mUserInteractiveDirectoryPath, FEATURE_CATEGORY);
shapesElement = UBFeature( shapesPath, QImage(":images/libpalette/ShapesCategory.svg"), tr("Shapes") , mLibShapesDirectoryPath, FEATURE_CATEGORY );
favoriteElement = UBFeature( favoritePath, QImage(":images/libpalette/FavoritesCategory.svg"), tr("Favorites"), QUrl("favorites"), FEATURE_FAVORITE );
webSearchElement = UBFeature( webSearchPath, QImage(":images/libpalette/WebSearchCategory.svg"), tr("Web search"), mLibSearchDirectoryPath, FEATURE_CATEGORY);
trashElement = UBFeature( rootPath, QImage(":images/libpalette/TrashCategory.svg"), tr("Trash"), trashDirectoryPath, FEATURE_TRASH );
trashElement = UBFeature( trashPath, QImage(":images/libpalette/TrashCategory.svg"), tr("Trash"), trashDirectoryPath, FEATURE_TRASH);
featuresList = new QList <UBFeature>();
@ -312,24 +338,24 @@ UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) :
void UBFeaturesController::startThread()
{
QList<QPair<QUrl, QString> > computingData;
QList<QPair<QUrl, UBFeature> > computingData;
computingData << QPair<QUrl, QString>(mLibAudiosDirectoryPath, audiosPath)
<< QPair<QUrl, QString>(mLibVideosDirectoryPath, moviesPath)
<< QPair<QUrl, QString>(mLibAnimationsDirectoryPath, flashPath)
<< QPair<QUrl, QString>(mLibPicturesDirectoryPath, picturesPath)
computingData << QPair<QUrl, UBFeature>(mLibAudiosDirectoryPath, audiosElement)
<< QPair<QUrl, UBFeature>(mLibVideosDirectoryPath, moviesElement)
<< QPair<QUrl, UBFeature>(mLibAnimationsDirectoryPath, flashElement)
<< QPair<QUrl, UBFeature>(mLibPicturesDirectoryPath, picturesElement)
<< QPair<QUrl, QString>(mUserInteractiveDirectoryPath, appPath)
<< QPair<QUrl, QString>(mUserAudioDirectoryPath, audiosPath)
<< QPair<QUrl, QString>(mUserPicturesDirectoryPath, picturesPath)
<< QPair<QUrl, QString>(mUserVideoDirectoryPath, moviesPath)
<< QPair<QUrl, QString>(mUserAnimationDirectoryPath, flashPath)
<< QPair<QUrl, UBFeature>(mUserInteractiveDirectoryPath, applicationsElement)
<< QPair<QUrl, UBFeature>(mUserAudioDirectoryPath, audiosElement)
<< QPair<QUrl, UBFeature>(mUserPicturesDirectoryPath, picturesElement)
<< QPair<QUrl, UBFeature>(mUserVideoDirectoryPath, moviesElement)
<< QPair<QUrl, UBFeature>(mUserAnimationDirectoryPath, flashElement)
<< QPair<QUrl, QString>(mLibApplicationsDirectoryPath, appPath)
<< QPair<QUrl, QString>(mLibShapesDirectoryPath, shapesPath)
<< QPair<QUrl, QString>(mLibInteractiveDirectoryPath, interactPath)
<< QPair<QUrl, QString>(trashDirectoryPath, trashPath)
<< QPair<QUrl, QString>(mLibSearchDirectoryPath, rootPath + "/" + "Web search");
<< QPair<QUrl, UBFeature>(mLibApplicationsDirectoryPath, applicationsElement)
<< QPair<QUrl, UBFeature>(mLibShapesDirectoryPath, shapesElement)
<< QPair<QUrl, UBFeature>(mLibInteractiveDirectoryPath, interactElement)
<< QPair<QUrl, UBFeature>(trashDirectoryPath, trashElement)
<< QPair<QUrl, UBFeature>(mLibSearchDirectoryPath, webSearchElement);
mCThread.compute(computingData, favoriteSet);
}
@ -340,7 +366,7 @@ void UBFeaturesController::createNpApiFeature(const QString &str)
QString widgetName = QFileInfo(str).fileName();
featuresModel->addItem(UBFeature(QString(appPath+"/Web"), QImage(UBGraphicsWidgetItem::iconFilePath(QUrl::fromLocalFile(str))), widgetName, QUrl::fromLocalFile(str), FEATURE_INTERACTIVE));
featuresModel->addItem(UBFeature(QString(appPath + "/Web/" + widgetName), QImage(UBGraphicsWidgetItem::iconFilePath(QUrl::fromLocalFile(str))), widgetName, QUrl::fromLocalFile(str), FEATURE_INTERACTIVE));
}
void UBFeaturesController::scanFS()
@ -365,9 +391,9 @@ void UBFeaturesController::scanFS()
QList <UBToolsManager::UBToolDescriptor> tools = UBToolsManager::manager()->allTools();
foreach (UBToolsManager::UBToolDescriptor tool, tools) {
featuresList->append(UBFeature(appPath, tool.icon.toImage(), tool.label, QUrl(tool.id), FEATURE_INTERNAL));
featuresList->append(UBFeature(appPath + "/" + tool.label, tool.icon.toImage(), tool.label, QUrl(tool.id), FEATURE_INTERNAL));
if (favoriteSet->find(QUrl(tool.id)) != favoriteSet->end()) {
featuresList->append(UBFeature(favoritePath, tool.icon.toImage(), tool.label, QUrl(tool.id), FEATURE_INTERNAL));
featuresList->append(UBFeature(favoritePath + "/" + tool.label, tool.icon.toImage(), tool.label, QUrl(tool.id), FEATURE_INTERNAL));
}
}
}
@ -386,12 +412,12 @@ void UBFeaturesController::fileSystemScan(const QUrl & currentPath, const QStrin
if ( fullFileName.contains(".thumbnail."))
continue;
UBFeature testFeature(currVirtualPath, icon, fileName, QUrl::fromLocalFile(fullFileName), featureType);
UBFeature testFeature(currVirtualPath + "/" + fileName, icon, fileName, QUrl::fromLocalFile(fullFileName), featureType);
featuresList->append(testFeature);
if ( favoriteSet->find( QUrl::fromLocalFile( fullFileName ) ) != favoriteSet->end() ) {
featuresList->append( UBFeature( favoritePath, icon, fileName, QUrl::fromLocalFile( fullFileName ), featureType ) );
featuresList->append( UBFeature( favoritePath + "/" + fileName, icon, fileName, QUrl::fromLocalFile( fullFileName ), featureType ) );
}
if (featureType == FEATURE_FOLDER) {
@ -466,7 +492,7 @@ void UBFeaturesController::addToFavorite( const QUrl &path )
QFileInfo fileInfo( filePath );
QString fileName = fileInfo.fileName();
UBFeatureElementType type = fileTypeFromUrl(fileInfo.absoluteFilePath());
UBFeature elem(favoritePath, getIcon(filePath, type), fileName, path, fileTypeFromUrl(filePath) );
UBFeature elem(favoritePath + "/" + fileName, getIcon(filePath, type), fileName, path, fileTypeFromUrl(filePath) );
favoriteSet->insert( path );
saveFavoriteList();
@ -631,7 +657,7 @@ void UBFeaturesController::importImage( const QImage &image, const UBFeature &de
image.save(filePath);
QImage thumb = createThumbnail( filePath );
UBFeature resultItem = UBFeature( dest.getFullVirtualPath(), thumb, mFileName,
UBFeature resultItem = UBFeature( dest.getFullVirtualPath() + "/" + mFileName, thumb, mFileName,
QUrl::fromLocalFile( filePath ), FEATURE_ITEM );
featuresModel->addItem(resultItem);
@ -671,10 +697,10 @@ void UBFeaturesController::addNewFolder(QString name)
if(!QFileInfo(path).exists()) {
QDir().mkpath(path);
}
UBFeature newFeatureFolder = UBFeature( currentElement.getFullVirtualPath(), QImage(":images/libpalette/folder.svg"),
UBFeature newFeatureFolder = UBFeature( currentElement.getFullVirtualPath() + "/" + name, QImage(":images/libpalette/folder.svg"),
name, QUrl::fromLocalFile( path ), FEATURE_FOLDER );
featuresModel->addItem( newFeatureFolder );
featuresModel->addItem(newFeatureFolder);
featuresProxyModel->invalidate();
}
@ -710,9 +736,9 @@ UBFeature UBFeaturesController::getDestinationFeatureForUrl( const QUrl &url )
void UBFeaturesController::addDownloadedFile(const QUrl &sourceUrl, const QByteArray &pData)
{
UBFeature dest = getDestinationFeatureForUrl( sourceUrl );
UBFeature dest = getDestinationFeatureForUrl(sourceUrl);
if ( dest == UBFeature() )
if (dest == UBFeature())
return;
QString fileName = QFileInfo( sourceUrl.toString() ).fileName();
@ -724,7 +750,7 @@ void UBFeaturesController::addDownloadedFile(const QUrl &sourceUrl, const QByteA
file.write(pData);
file.close();
UBFeature downloadedFeature = UBFeature( dest.getFullVirtualPath(), getIcon( filePath ),
UBFeature downloadedFeature = UBFeature(dest.getFullVirtualPath() + "/" + fileName, getIcon( filePath ),
fileName, QUrl::fromLocalFile(filePath), FEATURE_ITEM);
if (downloadedFeature != UBFeature()) {
featuresModel->addItem(downloadedFeature);
@ -742,7 +768,7 @@ UBFeature UBFeaturesController::moveItemToFolder( const QUrl &url, const UBFeatu
Q_ASSERT( QFileInfo( sourcePath ).exists() );
UBFeature possibleDest = getDestinationFeatureForUrl( url );
UBFeature possibleDest = getDestinationFeatureForUrl(url);
UBFeature dest = destination;
@ -767,7 +793,7 @@ UBFeature UBFeaturesController::moveItemToFolder( const QUrl &url, const UBFeatu
UBFeatureElementType type = FEATURE_ITEM;
if ( UBFileSystemUtils::mimeTypeFromFileName( newFullPath ).contains("application") )
type = FEATURE_INTERACTIVE;
UBFeature newElement( destVirtualPath, thumb, name, QUrl::fromLocalFile( newFullPath ), type );
UBFeature newElement( destVirtualPath + "/" + name, thumb, name, QUrl::fromLocalFile( newFullPath ), type );
return newElement;
}
@ -861,7 +887,7 @@ UBFeature UBFeaturesController::copyItemToFolder( const QUrl &url, const UBFeatu
UBFeatureElementType type = FEATURE_ITEM;
if (UBFileSystemUtils::mimeTypeFromFileName(newFullPath).contains("application"))
type = FEATURE_INTERACTIVE;
UBFeature newElement( destVirtualPath, thumb, name, QUrl::fromLocalFile( newFullPath ), type );
UBFeature newElement( destVirtualPath + "/" + name, thumb, name, QUrl::fromLocalFile( newFullPath ), type );
return newElement;
}
@ -899,7 +925,7 @@ void UBFeaturesController::moveExternalData(const QUrl &url, const UBFeature &de
Q_ASSERT(QFileInfo(newFullPath).exists());
QImage thumb = getIcon(newFullPath, type);
UBFeature newElement(destVirtualPath, thumb, name, QUrl::fromLocalFile(newFullPath), type);
UBFeature newElement(destVirtualPath + "/" + name, thumb, name, QUrl::fromLocalFile(newFullPath), type);
featuresModel->addItem(newElement);
}

@ -33,7 +33,7 @@ class UBFeaturesComputingThread : public QThread
public:
explicit UBFeaturesComputingThread(QObject *parent = 0);
virtual ~UBFeaturesComputingThread();
void compute(const QList<QPair<QUrl, QString> > &pScanningData, QSet<QUrl> *pFavoritesSet);
void compute(const QList<QPair<QUrl, UBFeature> > &pScanningData, QSet<QUrl> *pFavoritesSet);
protected:
void run();
@ -51,16 +51,16 @@ public slots:
private:
void scanFS(const QUrl & currentPath, const QString & currVirtualPath, const QSet<QUrl> &pFavoriteSet);
void scanAll(QList<QPair<QUrl, QString> > pScanningData, const QSet<QUrl> &pFavoriteSet);
void scanAll(QList<QPair<QUrl, UBFeature> > pScanningData, const QSet<QUrl> &pFavoriteSet);
int featuresCount(const QUrl &pPath);
int featuresCountAll(QList<QPair<QUrl, QString> > pScanningData);
int featuresCountAll(QList<QPair<QUrl, UBFeature> > pScanningData);
private:
QMutex mMutex;
QWaitCondition mWaitCondition;
QUrl mScanningPath;
QString mScanningVirtualPath;
QList<QPair<QUrl, QString> > mScanningData;
QList<QPair<QUrl, UBFeature> > mScanningData;
QSet<QUrl> mFavoriteSet;
bool restart;
bool abort;
@ -94,6 +94,7 @@ public:
// UBFeature();
virtual ~UBFeature();
QString getName() const { return mName; }
QString getDisplayName() const {return mDisplayName;}
QImage getThumbnail() const {return mThumbnail;}
QString getVirtualPath() const { return virtualDir; }
//QString getPath() const { return mPath; };
@ -112,11 +113,17 @@ public:
const QMap<QString,QString> & getMetadata() const { return metadata; }
void setMetadata( const QMap<QString,QString> &data ) { metadata = data; }
private:
QString getNameFromVirtualPath(const QString &pVirtPath);
QString getVirtualDirFromVirtualPath(const QString &pVirtPath);
private:
QString virtualDir;
QString virtualPath;
QImage mThumbnail;
QString mName;
QString mDisplayName;
QUrl mPath;
UBFeatureElementType elementType;
QMap<QString,QString> metadata;
@ -182,6 +189,19 @@ public:
void assignFeaturesListVeiw(UBFeaturesListView *pList);
void assignPathListView(UBFeaturesListView *pList);
public:
static const QString rootPath;
static const QString audiosPath;
static const QString moviesPath;
static const QString picturesPath;
static const QString appPath;
static const QString flashPath;
static const QString shapesPath;
static const QString interactPath;
static const QString trashPath;
static const QString favoritePath;
static const QString webSearchPath;
signals:
void maxFilesCountEvaluated(int pLimit);
void scanStarted();
@ -235,17 +255,7 @@ private:
QUrl trashDirectoryPath;
QUrl mLibSearchDirectoryPath;
QString rootPath;
QString audiosPath;
QString moviesPath;
QString picturesPath;
QString appPath;
QString flashPath;
QString shapesPath;
QString interactPath;
QString trashPath;
QString favoritePath;
QString webSearchPath;
int mLastItemOffsetIndex;
UBFeature currentElement;

@ -139,15 +139,7 @@ UBApplication::UBApplication(const QString &id, int &argc, char **argv) : QtSing
UBSettings *settings = UBSettings::settings();
QString forcedLanguage("");
if(args.contains("-lang"))
forcedLanguage=args.at(args.indexOf("-lang") + 1);
else{
QString setLanguage = settings->appPreferredLanguage->get().toString();
if(!setLanguage.isEmpty())
forcedLanguage = setLanguage;
}
setupTranslator(forcedLanguage);
setupTranslators(args);
connect(settings->appToolBarPositionedAtTop, SIGNAL(changed(QVariant)), this, SLOT(toolBarPositionChanged(QVariant)));
connect(settings->appToolBarDisplayText, SIGNAL(changed(QVariant)), this, SLOT(toolBarDisplayTextChanged(QVariant)));
@ -207,45 +199,71 @@ UBApplication::~UBApplication()
staticMemoryCleaner = 0;
}
void UBApplication::setupTranslator(QString forcedLanguage)
QString UBApplication::checkLanguageAvailabilityForSankore(QString &language)
{
QStringList availablesTranslations = UBPlatformUtils::availableTranslations();
QString language("");
if(!forcedLanguage.isEmpty()){
if(availablesTranslations.contains(forcedLanguage,Qt::CaseInsensitive))
language = forcedLanguage;
else
qDebug() << "forced language " << forcedLanguage << " not available";
}
else{
QString systemLanguage = UBPlatformUtils::systemLanguage();
if(availablesTranslations.contains(systemLanguage,Qt::CaseInsensitive))
language = systemLanguage;
else
qDebug() << "translation for system language " << systemLanguage << " not found";
}
if(language.isEmpty()){
language = "en_US";
//fallback if no translation are available
}
else{
mApplicationTranslator = new QTranslator(this);
mQtGuiTranslator = new QTranslator(this);
mApplicationTranslator->load(UBPlatformUtils::translationPath(QString("sankore_"),language));
installTranslator(mApplicationTranslator);
mQtGuiTranslator->load(UBPlatformUtils::translationPath(QString("qt_"),language));
if(!mQtGuiTranslator->isEmpty()){
// checked because this translation could be not available
installTranslator(mQtGuiTranslator);
}
else
qDebug() << "Qt gui translation in " << language << " are not available";
}
QStringList availableTranslations = UBPlatformUtils::availableTranslations();
if(availableTranslations.contains(language,Qt::CaseInsensitive))
return language;
else{
if(language.length() > 2){
QString shortLanguageCode = language.left(2);
if(availableTranslations.contains(shortLanguageCode,Qt::CaseInsensitive))
return shortLanguageCode;
}
}
return QString("");
}
void UBApplication::setupTranslators(QStringList args)
{
QString forcedLanguage;
if(args.contains("-lang"))
forcedLanguage=args.at(args.indexOf("-lang") + 1);
else{
QString setLanguage = UBSettings::settings()->appPreferredLanguage->get().toString();
if(!setLanguage.isEmpty())
forcedLanguage = setLanguage;
}
QStringList availablesTranslations = UBPlatformUtils::availableTranslations();
QString language("");
if(!forcedLanguage.isEmpty())
language = checkLanguageAvailabilityForSankore(forcedLanguage);
if(language.isEmpty()){
QString systemLanguage = UBPlatformUtils::systemLanguage();
language = checkLanguageAvailabilityForSankore(systemLanguage);
}
if(language.isEmpty()){
language = "en_US";
//fallback if no translation are available
}
else{
mApplicationTranslator = new QTranslator(this);
mQtGuiTranslator = new QTranslator(this);
mApplicationTranslator->load(UBPlatformUtils::translationPath(QString("sankore_"),language));
installTranslator(mApplicationTranslator);
QString qtGuiTranslationPath = UBPlatformUtils::translationPath("qt_", language);
if(!QFile(qtGuiTranslationPath).exists()){
qtGuiTranslationPath = UBPlatformUtils::translationPath("qt_", language.left(2));
if(!QFile(qtGuiTranslationPath).exists())
qtGuiTranslationPath = "";
}
if(!qtGuiTranslationPath.isEmpty()){
qDebug() << "qtGuiTranslationPath " << qtGuiTranslationPath;
mQtGuiTranslator->load(qtGuiTranslationPath);
installTranslator(mQtGuiTranslator);
}
else
qDebug() << "Qt gui translation in " << language << " is not available";
}
QLocale::setDefault(QLocale(language));
qDebug() << "Running application in:" << language;

@ -119,10 +119,10 @@ class UBApplication : public QtSingleApplication
private:
void updateProtoActionsState();
void setupTranslator(QString forcedLanguage);
void setupTranslators(QStringList args);
QList<QMenu*> mProtoMenus;
bool mIsVerbose;
QString checkLanguageAvailabilityForSankore(QString& language);
protected:
#if defined(Q_WS_MACX) && !defined(QT_MAC_USE_COCOA)

@ -66,8 +66,7 @@ UBDesktopAnnotationController::UBDesktopAnnotationController(QObject *parent)
, mDesktopStylusTool(UBDrawingController::drawingController()->stylusTool())
{
mTransparentDrawingView = new UBBoardView(UBApplication::boardController, NULL, true); // deleted in UBDesktopAnnotationController::destructor
mTransparentDrawingView = new UBBoardView(UBApplication::boardController, static_cast<QWidget*>(0), true); // deleted in UBDesktopAnnotationController::destructor
mTransparentDrawingView->setAttribute(Qt::WA_TranslucentBackground, true);
#ifdef Q_WS_MAC
mTransparentDrawingView->setAttribute(Qt::WA_MacNoShadow, true);
@ -87,7 +86,7 @@ UBDesktopAnnotationController::UBDesktopAnnotationController(QObject *parent)
mTransparentDrawingView->setScene(mTransparentDrawingScene);
mTransparentDrawingScene->setDrawingMode(true);
mDesktopPalette = new UBDesktopPalette(mTransparentDrawingView);
mDesktopPalette = new UBDesktopPalette(NULL); // FIX #633: The palette must be 'floating' in order to stay on top of the library palette
if (UBPlatformUtils::hasVirtualKeyboard())
{
@ -102,9 +101,15 @@ UBDesktopAnnotationController::UBDesktopAnnotationController(QObject *parent)
}
connect(mDesktopPalette, SIGNAL(uniboardClick()), this, SLOT(goToUniboard()));
connect(mDesktopPalette, SIGNAL(uniboardClick()), this, SLOT(onToolClicked()));
connect(mDesktopPalette, SIGNAL(customClick()), this, SLOT(customCapture()));
connect(mDesktopPalette, SIGNAL(customClick()), this, SLOT(onToolClicked()));
connect(mDesktopPalette, SIGNAL(windowClick()), this, SLOT(windowCapture()));
connect(mDesktopPalette, SIGNAL(windowClick()), this, SLOT(onToolClicked()));
connect(mDesktopPalette, SIGNAL(screenClick()), this, SLOT(screenCapture()));
connect(mDesktopPalette, SIGNAL(screenClick()), this, SLOT(onToolClicked()));
connect(UBApplication::mainWindow->actionPointer, SIGNAL(triggered()), this, SLOT(onToolClicked()));
connect(UBApplication::mainWindow->actionSelector, SIGNAL(triggered()), this, SLOT(onToolClicked()));
connect(mDesktopPalette, SIGNAL(maximized()), this, SLOT(onDesktopPaletteMaximized()));
connect(mDesktopPalette, SIGNAL(minimizeStart(eMinimizedLocation)), this, SLOT(onDesktopPaletteMinimize()));
@ -114,13 +119,13 @@ UBDesktopAnnotationController::UBDesktopAnnotationController(QObject *parent)
connect(UBDrawingController::drawingController(), SIGNAL(stylusToolChanged(int)), this, SLOT(stylusToolChanged(int)));
// Add the desktop associated palettes
mDesktopPenPalette = new UBDesktopPenPalette(mTransparentDrawingView);
mDesktopPenPalette = new UBDesktopPenPalette(NULL); // FIX #633: The palette must be 'floating' in order to stay on top of the library palette
connect(mDesktopPalette, SIGNAL(maximized()), mDesktopPenPalette, SLOT(onParentMaximized()));
connect(mDesktopPalette, SIGNAL(minimizeStart(eMinimizedLocation)), mDesktopPenPalette, SLOT(onParentMinimized()));
mDesktopMarkerPalette = new UBDesktopMarkerPalette(mTransparentDrawingView);
mDesktopEraserPalette = new UBDesktopEraserPalette(mTransparentDrawingView);
mDesktopMarkerPalette = new UBDesktopMarkerPalette(NULL); // FIX #633: The palette must be 'floating' in order to stay on top of the library palette
mDesktopEraserPalette = new UBDesktopEraserPalette(NULL); // FIX #633: The palette must be 'floating' in order to stay on top of the library palette
mDesktopPalette->setBackgroundBrush(UBSettings::settings()->opaquePaletteColor);
mDesktopPenPalette->setBackgroundBrush(UBSettings::settings()->opaquePaletteColor);
@ -149,6 +154,12 @@ UBDesktopAnnotationController::UBDesktopAnnotationController(QObject *parent)
connect(UBApplication::boardController->paletteManager()->rightPalette(), SIGNAL(resized()), this, SLOT(refreshMask()));
#endif
onDesktopPaletteMaximized();
// FIX #633: Ensure that these palettes stay on top of the other elements
mDesktopEraserPalette->raise();
mDesktopMarkerPalette->raise();
mDesktopPenPalette->raise();
mDesktopPalette->raise();
}
UBDesktopAnnotationController::~UBDesktopAnnotationController()
@ -238,11 +249,7 @@ void UBDesktopAnnotationController::setAssociatedPalettePosition(UBActionPalette
if(act->objectName() == actionName)
{
int iAction = actions.indexOf(act);
yPen = iAction * mDesktopPalette->buttonSize().height();
// Add the borders
yPen += (iAction) * (mDesktopPalette->border() + 4); // 4 has been set after some experiment. We must determine why this value is good
yPen = iAction * (mDesktopPalette->buttonSize().height() + 2 * mDesktopPalette->border() +6); // This is the mysterious value (6)
break;
}
}
@ -267,7 +274,7 @@ void UBDesktopAnnotationController::eraseDesktopAnnotations()
{
if (mTransparentDrawingScene)
{
mTransparentDrawingScene->clearAnnotations();
mTransparentDrawingScene->clearContent(UBGraphicsScene::clearAnnotations);
}
}
@ -382,6 +389,7 @@ void UBDesktopAnnotationController::hideWindow()
void UBDesktopAnnotationController::goToUniboard()
{
onToolClicked();
hideWindow();
UBPlatformUtils::setDesktopMode(false);
@ -397,6 +405,7 @@ void UBDesktopAnnotationController::goToUniboard()
void UBDesktopAnnotationController::customCapture()
{
onToolClicked();
mIsFullyTransparent = true;
updateBackground();
@ -424,6 +433,7 @@ void UBDesktopAnnotationController::customCapture()
void UBDesktopAnnotationController::windowCapture()
{
onToolClicked();
mIsFullyTransparent = true;
updateBackground();
@ -453,6 +463,7 @@ void UBDesktopAnnotationController::windowCapture()
void UBDesktopAnnotationController::screenCapture()
{
onToolClicked();
mIsFullyTransparent = true;
updateBackground();
@ -539,7 +550,6 @@ void UBDesktopAnnotationController::penActionPressed()
*/
void UBDesktopAnnotationController::penActionReleased()
{
qDebug() << "penActionReleased()";
mHoldTimerPen.stop();
if(mPendingPenButtonPressed)
{
@ -594,7 +604,6 @@ void UBDesktopAnnotationController::eraserActionPressed()
*/
void UBDesktopAnnotationController::eraserActionReleased()
{
qDebug() << "eraserActionReleased()";
mHoldTimerEraser.stop();
if(mPendingEraserButtonPressed)
{
@ -651,7 +660,6 @@ void UBDesktopAnnotationController::markerActionPressed()
*/
void UBDesktopAnnotationController::markerActionReleased()
{
qDebug() << "markerActionReleased()";
mHoldTimerMarker.stop();
if(mPendingMarkerButtonPressed)
{
@ -930,3 +938,9 @@ void UBDesktopAnnotationController::refreshMask()
updateMask(true);
}
}
void UBDesktopAnnotationController::onToolClicked(){
mDesktopEraserPalette->hide();
mDesktopMarkerPalette->hide();
mDesktopPenPalette->hide();
}

@ -111,6 +111,7 @@ class UBDesktopAnnotationController : public QObject
void onDesktopPaletteMinimize();
void onTransparentWidgetResized();
void refreshMask();
void onToolClicked();
private:
void setAssociatedPalettePosition(UBActionPalette* palette, const QString& actionName);

@ -117,8 +117,11 @@ UBDocumentProxyTreeItem* UBDocumentController::findDocument(UBDocumentProxy* pro
void UBDocumentController::selectDocument(UBDocumentProxy* proxy, bool setAsCurrentDocument)
{
if (!proxy)
if (proxy==NULL)
{
setDocument(NULL);
return;
}
QTreeWidgetItemIterator it(mDocumentUI->documentTreeWidget);
@ -531,6 +534,153 @@ void UBDocumentController::duplicateSelectedItem()
}
}
void UBDocumentController::moveDocumentToTrash(UBDocumentGroupTreeItem* groupTi, UBDocumentProxyTreeItem *proxyTi)
{
int index = proxyTi->parent()->indexOfChild(proxyTi);
index --;
if (index >= 0)
{
if (proxyTi->proxy() == mBoardController->selectedDocument())
{
selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(index))->proxy(), true);
}
else
proxyTi->parent()->child(index)->setSelected(true);
}
else if (proxyTi->parent()->childCount() > 1)
{
if (proxyTi->proxy() == mBoardController->selectedDocument())
{
selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(1))->proxy(), true);
}
else
proxyTi->parent()->child(1)->setSelected(true);
}
else
{
if (proxyTi->proxy() == mBoardController->selectedDocument())
{
bool documentFound = false;
for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
{
QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
if (!groupItem->isTrashFolder())
{
for(int j=0; j<groupItem->childCount(); j++)
{
if (((UBDocumentProxyTreeItem*)groupItem->child(j))->proxy() != mBoardController->selectedDocument())
{
selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy(), true);
documentFound = true;
break;
}
}
}
if (documentFound)
break;
}
if (!documentFound)
{
UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument(groupTi->groupName());
selectDocument(document, true);
}
}
else
proxyTi->parent()->setSelected(true);
}
QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName);
UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy());
proxyTi->parent()->removeChild(proxyTi);
mTrashTi->addChild(proxyTi);
proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
}
void UBDocumentController::moveFolderToTrash(UBDocumentGroupTreeItem* groupTi)
{
bool changeCurrentDocument = false;
for (int i = 0; i < groupTi->childCount(); i++)
{
UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
if (proxyTi && proxyTi->proxy() && proxyTi->proxy() == mBoardController->selectedDocument())
{
changeCurrentDocument = true;
break;
}
}
QList<UBDocumentProxyTreeItem*> toBeDeleted;
for (int i = 0; i < groupTi->childCount(); i++)
{
UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
if (proxyTi && proxyTi->proxy())
toBeDeleted << proxyTi;
}
for (int i = 0; i < toBeDeleted.count(); i++)
{
UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i);
showMessage(QString("Deleting %1").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString()));
// Move document to trash
QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName);
UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy());
groupTi->removeChild(proxyTi);
mTrashTi->addChild(proxyTi);
proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
showMessage(QString("%1 deleted").arg(groupTi->groupName()));
}
// dont remove default group
if (!groupTi->isDefaultFolder())
{
int index = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(groupTi);
if (index >= 0)
{
mDocumentUI->documentTreeWidget->takeTopLevelItem(index);
}
}
if (changeCurrentDocument)
{
bool documentFound = false;
for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
{
QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
if (!groupItem->isTrashFolder() && groupItem != groupTi)
{
for(int j=0; j<groupItem->childCount(); j++)
{
if (((UBDocumentProxyTreeItem*)groupItem->child(j))->proxy() != mBoardController->selectedDocument())
{
selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy(), true);
documentFound = true;
break;
}
}
}
if (documentFound)
break;
}
if (!documentFound)
{
UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument( UBSettings::defaultDocumentGroupName );
selectDocument(document, true);
}
}
reloadThumbnails();
}
void UBDocumentController::deleteSelectedItem()
{
@ -551,64 +701,21 @@ void UBDocumentController::deleteSelectedItem()
{
if(UBApplication::mainWindow->yesNoQuestion(tr("Remove Document"), tr("Are you sure you want to remove the document '%1'?").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString())))
{
if (proxyTi->parent() == mTrashTi)
if (proxyTi->parent() != mTrashTi)
{
int index = proxyTi->parent()->indexOfChild(proxyTi);
index --;
if (index >= 0)
{
if (proxyTi->proxy() == mBoardController->selectedDocument())
{
selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(index))->proxy());
}
else
proxyTi->parent()->child(index)->setSelected(true);
}
else if (proxyTi->parent()->childCount() > 1)
{
if (proxyTi->proxy() == mBoardController->selectedDocument())
{
selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(1))->proxy());
}
else
proxyTi->parent()->child(1)->setSelected(true);
}
else
{
if (proxyTi->proxy() == mBoardController->selectedDocument())
{
for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
{
QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
if (groupItem != selectedDocumentGroupTreeItem() && groupItem->childCount() > 0)
{
selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy());
break;
}
}
}
else
proxyTi->parent()->setSelected(true);
}
proxyTi->parent()->removeChild(proxyTi);
UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy());
reloadThumbnails();
moveDocumentToTrash(groupTi, proxyTi);
}
else
{
// Move document to trash
QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName);
UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy());
// We have to physically delete document
proxyTi->parent()->removeChild(proxyTi);
mTrashTi->addChild(proxyTi);
proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy());
if (mTrashTi->childCount()==0)
selectDocument(NULL);
else
selectDocument(((UBDocumentProxyTreeItem*)mTrashTi->child(0))->proxy());
reloadThumbnails();
}
}
}
@ -649,71 +756,7 @@ void UBDocumentController::deleteSelectedItem()
if(UBApplication::mainWindow->yesNoQuestion(tr("Remove Folder"), tr("Are you sure you want to remove the folder '%1' and all its content?").arg(groupTi->groupName())))
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
bool changeCurrentDocument = false;
for (int i = 0; i < groupTi->childCount(); i++)
{
UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
if (proxyTi && proxyTi->proxy() && proxyTi->proxy() == mBoardController->selectedDocument())
{
changeCurrentDocument = true;
break;
}
}
if (changeCurrentDocument)
{
for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
{
QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
if (groupItem != groupTi && groupItem->childCount() > 0)
{
selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy());
break;
}
}
}
QList<UBDocumentProxyTreeItem*> toBeDeleted;
for (int i = 0; i < groupTi->childCount(); i++)
{
UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
if (proxyTi && proxyTi->proxy())
toBeDeleted << proxyTi;
}
for (int i = 0; i < toBeDeleted.count(); i++)
{
UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i);
showMessage(QString("Deleting %1").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString()));
// Move document to trash
QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName);
UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy());
groupTi->removeChild(proxyTi);
mTrashTi->addChild(proxyTi);
proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
showMessage(QString("%1 deleted").arg(groupTi->groupName()));
}
// dont remove default group
if (!groupTi->isDefaultFolder())
{
int index = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(groupTi);
if (index >= 0)
{
mDocumentUI->documentTreeWidget->takeTopLevelItem(index);
}
}
reloadThumbnails();
moveFolderToTrash(groupTi);
QApplication::restoreOverrideCursor();
}
}

@ -111,6 +111,9 @@ class UBDocumentController : public UBDocumentContainer
bool mToolsPalettePositionned;
UBDocumentGroupTreeItem* mTrashTi;
void moveDocumentToTrash(UBDocumentGroupTreeItem* groupTi, UBDocumentProxyTreeItem *proxyTi);
void moveFolderToTrash(UBDocumentGroupTreeItem* groupTi);
private slots:
void documentZoomSliderValueChanged (int value);
void loadDocumentProxies();

@ -226,7 +226,7 @@ void UBGraphicsDelegateFrame::mousePressEvent(QGraphicsSceneMouseEvent *event)
mInitialTransform = buildTransform();
mCurrentTool = toolFromPos(event->pos());
setCursorFromAngle(QString(""));
setCursorFromAngle(QString::number((int)mAngle % 360));
event->accept();
prepareFramesToMove(getLinkedFrames());

@ -28,18 +28,12 @@ UBGraphicsGroupContainerItem::UBGraphicsGroupContainerItem(QGraphicsItem *parent
setUuid(QUuid::createUuid());
setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly
}
UBGraphicsGroupContainerItem::~UBGraphicsGroupContainerItem()
{
foreach (QGraphicsItem *item, childItems())
{
removeFromGroup(item);
if (item && item->scene())
item->scene()->removeItem(item);
}
if (mDelegate)
delete mDelegate;
}
void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item)
@ -83,6 +77,13 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item)
QTransform newItemTransform(itemTransform);
item->setPos(mapFromItem(item, 0, 0));
if (item->scene()) {
item->scene()->removeItem(item);
}
if (corescene())
corescene()->removeItemFromDeletion(item);
item->setParentItem(this);
// removing position from translation component of the new transform
@ -113,10 +114,12 @@ void UBGraphicsGroupContainerItem::removeFromGroup(QGraphicsItem *item)
{
if (!item) {
qDebug() << "can't specify the item because of the null pointer";
return;
}
UBGraphicsScene *groupScene = scene();
if (groupScene) {
UBCoreGraphicsScene *groupScene = corescene();
if (groupScene)
{
groupScene->addItemToDeletion(item);
}
@ -170,9 +173,9 @@ void UBGraphicsGroupContainerItem::paint(QPainter *painter, const QStyleOptionGr
// }
}
UBGraphicsScene *UBGraphicsGroupContainerItem::scene()
UBCoreGraphicsScene *UBGraphicsGroupContainerItem::corescene()
{
UBGraphicsScene *castScene = dynamic_cast<UBGraphicsScene*>(QGraphicsItem::scene());
UBCoreGraphicsScene *castScene = dynamic_cast<UBCoreGraphicsScene*>(QGraphicsItem::scene());
return castScene;
}
@ -218,15 +221,7 @@ void UBGraphicsGroupContainerItem::setUuid(const QUuid &pUuid)
void UBGraphicsGroupContainerItem::destroy() {
UBGraphicsScene *groupScene = scene();
foreach (QGraphicsItem *item, childItems()) {
if (groupScene) {
groupScene->addItemToDeletion(item);
}
pRemoveFromGroup(item);
item->setFlag(QGraphicsItem::ItemIsSelectable, true);
item->setFlag(QGraphicsItem::ItemIsFocusable, true);
@ -235,6 +230,18 @@ void UBGraphicsGroupContainerItem::destroy() {
remove();
}
void UBGraphicsGroupContainerItem::clearSource()
{
foreach(QGraphicsItem *child, childItems())
{
UBGraphicsItem *item = dynamic_cast<UBGraphicsItem *>(child);
if (item)
{
item->clearSource();
}
}
}
void UBGraphicsGroupContainerItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if (mDelegate->mousePressEvent(event)) {
@ -327,6 +334,12 @@ void UBGraphicsGroupContainerItem::pRemoveFromGroup(QGraphicsItem *item)
item->setParentItem(newParent);
item->setPos(oldPos);
UBGraphicsScene *Scene = dynamic_cast<UBGraphicsScene *>(item->scene());
if (Scene)
{
Scene->addItem(item);
}
// removing position from translation component of the new transform
if (!item->pos().isNull())
itemTransform *= QTransform::fromTranslate(-item->x(), -item->y());

@ -4,6 +4,7 @@
#include <QGraphicsItem>
#include "domain/UBItem.h"
#include "frameworks/UBCoreGraphicsScene.h"
class UBGraphicsGroupContainerItem : public QGraphicsItem, public UBItem, public UBGraphicsItem
{
@ -23,7 +24,7 @@ public:
virtual UBGraphicsItemDelegate* Delegate() const { return mDelegate;}
virtual UBGraphicsScene* scene();
virtual UBCoreGraphicsScene *corescene();
virtual UBGraphicsGroupContainerItem *deepCopy() const;
virtual void copyItemParameters(UBItem *copy) const;
@ -38,6 +39,8 @@ public:
virtual void setUuid(const QUuid &pUuid);
void destroy();
virtual void clearSource();
protected:
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);

@ -113,7 +113,6 @@ UBGraphicsItemDelegate::UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObjec
, mFlippable(false)
, mToolBarUsed(useToolBar)
{
// NOOP
connect(UBApplication::boardController, SIGNAL(zoomChanged(qreal)), this, SLOT(onZoomChanged()));
}
@ -167,7 +166,7 @@ void UBGraphicsItemDelegate::init()
UBGraphicsItemDelegate::~UBGraphicsItemDelegate()
{
qDeleteAll(mButtons);
disconnect(UBApplication::boardController, SIGNAL(zoomChanged(qreal)), this, SLOT(onZoomChanged()));
// do not release mMimeData.
// the mMimeData is owned by QDrag since the setMimeData call as specified in the documentation
}
@ -388,12 +387,25 @@ void UBGraphicsItemDelegate::remove(bool canUndo)
UBGraphicsScene* scene = dynamic_cast<UBGraphicsScene*>(mDelegated->scene());
if (scene)
{
foreach(DelegateButton* button, mButtons)
scene->removeItem(button);
// bool shownOnDisplay = mDelegated->data(UBGraphicsItemData::ItemLayerType).toInt() != UBItemLayerType::Control;
// showHide(shownOnDisplay);
// updateFrame();
// updateButtons();
if (mFrame && !mFrame->scene() && mDelegated->scene())
{
mDelegated->scene()->addItem(mFrame);
}
mFrame->setAntiScale(mAntiScaleRatio);
mFrame->positionHandles();
updateButtons(true);
foreach(DelegateButton* button, mButtons) {
scene->removeItem(button);
}
scene->removeItem(mFrame);
/* this is performed because when removing delegated from scene while it contains flash content, segfault happens because of QGraphicsScene::removeItem() */
/* this is performed because when removing delegated from scene while it contains flash content, segfault happens because of QGraphicsScene::removeItem() */
UBGraphicsWebView *mDelegated_casted = dynamic_cast<UBGraphicsWebView*>(mDelegated);
if (mDelegated_casted)
mDelegated_casted->setHtml(QString());

@ -244,6 +244,7 @@ class UBGraphicsItemDelegate : public QObject
UBGraphicsToolBarItem* getToolBarItem() const { return mToolBarItem; }
qreal antiScaleRatio() const { return mAntiScaleRatio; }
virtual void update() {positionHandles();}
signals:
void showOnDisplayChanged(bool shown);

@ -142,14 +142,14 @@ QColor UBGraphicsPolygonItem::color() const
UBItem* UBGraphicsPolygonItem::deepCopy() const
{
UBGraphicsPolygonItem* copy = new UBGraphicsPolygonItem(polygon(), parentItem());
{
UBGraphicsPolygonItem* copy = new UBGraphicsPolygonItem(polygon(), 0);
UBGraphicsStroke *stroke = new UBGraphicsStroke();
copyItemParameters(copy);
copy->mOriginalLine = this->mOriginalLine;
copy->mOriginalWidth = this->mOriginalWidth;
copy->mIsNominalLine = this->mIsNominalLine;
copy->setStroke(stroke);
return copy;
}
@ -160,17 +160,15 @@ void UBGraphicsPolygonItem::copyItemParameters(UBItem *copy) const
UBGraphicsPolygonItem *cp = dynamic_cast<UBGraphicsPolygonItem*>(copy);
if (cp)
{
cp->mOriginalLine = QLineF();
cp->mOriginalWidth = -1;
cp->mIsNominalLine = false;
cp->mOriginalLine = this->mOriginalLine;
cp->mOriginalWidth = this->mOriginalWidth;
cp->mIsNominalLine = this->mIsNominalLine;
cp->setStroke(this->stroke());
cp->setStrokesGroup(this->strokesGroup());
cp->setTransform(transform());
cp->setBrush(this->brush());
cp->setPen(this->pen());
cp->mHasAlpha = this->mHasAlpha;
cp->setColorOnDarkBackground(this->colorOnDarkBackground());
cp->setColorOnLightBackground(this->colorOnLightBackground());

@ -264,7 +264,6 @@ UBGraphicsScene::UBGraphicsScene(UBDocumentProxy* parent)
, mCrossedBackground(false)
, mIsDesktopMode(false)
, mZoomFactor(1)
, mIsModified(true)
, mBackgroundObject(0)
, mPreviousWidth(0)
, mInputDeviceIsPressed(false)
@ -306,7 +305,10 @@ UBGraphicsScene::~UBGraphicsScene()
{
if (mCurrentStroke)
if (mCurrentStroke->polygons().empty())
{
delete mCurrentStroke;
mCurrentStroke = NULL;
}
if (mZLayerController)
delete mZLayerController;
@ -434,6 +436,11 @@ bool UBGraphicsScene::inputDevicePress(const QPointF& scenePos, const qreal& pre
}
}
if (mCurrentStroke && mCurrentStroke->polygons().empty()){
delete mCurrentStroke;
mCurrentStroke = NULL;
}
return accepted;
}
@ -475,6 +482,10 @@ bool UBGraphicsScene::inputDeviceMove(const QPointF& scenePos, const qreal& pres
UBCoreGraphicsScene::removeItemFromDeletion(mpLastPolygon);
mAddedItems.remove(mpLastPolygon);
mCurrentStroke->remove(mpLastPolygon);
if (mCurrentStroke->polygons().empty()){
delete mCurrentStroke;
mCurrentStroke = NULL;
}
removeItem(mpLastPolygon);
mPreviousPolygonItems.removeAll(mpLastPolygon);
}
@ -892,25 +903,18 @@ void UBGraphicsScene::recolorAllItems()
view->setViewportUpdateMode(QGraphicsView::NoViewportUpdate);
}
for(int i = 0; i < mFastAccessItems.size(); i++)
{
UBGraphicsPolygonItem *polygonItem = qgraphicsitem_cast<UBGraphicsPolygonItem*> (mFastAccessItems.at(i));
if (polygonItem)
{
QColor color;
if (mDarkBackground)
{
color = polygonItem->colorOnDarkBackground();
}
else
{
color = polygonItem->colorOnLightBackground();
bool currentIslight = isLightBackground();
foreach (QGraphicsItem *item, items()) {
if (item->type() == UBGraphicsStrokesGroup::Type) {
UBGraphicsStrokesGroup *curGroup = static_cast<UBGraphicsStrokesGroup*>(item);
QColor compareColor = curGroup->color(currentIslight ? UBGraphicsStrokesGroup::colorOnDarkBackground
: UBGraphicsStrokesGroup::colorOnLightBackground);
if (curGroup->color() == compareColor) {
QColor newColor = curGroup->color(!currentIslight ? UBGraphicsStrokesGroup::colorOnDarkBackground
: UBGraphicsStrokesGroup::colorOnLightBackground);
curGroup->setColor(newColor);
}
polygonItem->setColor(color);
continue;
}
}
@ -1061,116 +1065,72 @@ UBItem* UBGraphicsScene::deepCopy() const
return sceneDeepCopy();
}
void UBGraphicsScene::clearItemsAndAnnotations()
{
deselectAllItems();
QSet<QGraphicsItem*> emptyList;
QSet<QGraphicsItem*> removedItems;
QListIterator<QGraphicsItem*> itItems(mFastAccessItems);
while (itItems.hasNext())
{
QGraphicsItem* item = itItems.next();
if(!mTools.contains(item) && !isBackgroundObject(item))
{
removeItem(item);
removedItems << item;
}
}
// force refresh, QT is a bit lazy and take a lot of time (nb item ^2 ?) to trigger repaint
update(sceneRect());
if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented
UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, removedItems, emptyList);
UBApplication::undoStack->push(uc);
}
setDocumentUpdated();
}
void UBGraphicsScene::clearItems()
void UBGraphicsScene::clearContent(clearCase pCase)
{
deselectAllItems();
QSet<QGraphicsItem*> emptyList;
QSet<QGraphicsItem*> removedItems;
QListIterator<QGraphicsItem*> itItems(mFastAccessItems);
switch (pCase) {
case clearBackground :
removeItem(mBackgroundObject);
removedItems << mBackgroundObject;
break;
case clearItemsAndAnnotations :
case clearItems :
case clearAnnotations :
foreach(QGraphicsItem* item, items()) {
bool isGroup = item->type() == UBGraphicsGroupContainerItem::Type;
bool isStrokesGroup = item->type() == UBGraphicsStrokesGroup::Type;
UBGraphicsGroupContainerItem *itemGroup = item->parentItem()
? qgraphicsitem_cast<UBGraphicsGroupContainerItem*>(item->parentItem())
: 0;
UBGraphicsItemDelegate *curDelegate = UBGraphicsItem::Delegate(item);
if (!curDelegate) {
continue;
}
while (itItems.hasNext())
{
QGraphicsItem* item = itItems.next();
bool shouldDelete = false;
switch (static_cast<int>(pCase)) {
case clearAnnotations :
shouldDelete = isStrokesGroup;
break;
case clearItems :
shouldDelete = !isGroup && !isBackgroundObject(item) && !isStrokesGroup;
break;
case clearItemsAndAnnotations:
shouldDelete = !isGroup && !isBackgroundObject(item);
break;
}
if (!item->parentItem())
{
UBGraphicsPolygonItem* pi = qgraphicsitem_cast<UBGraphicsPolygonItem*>(item);
if(shouldDelete) {
if (itemGroup) {
itemGroup->removeFromGroup(item);
if (itemGroup->childItems().count() == 1) {
itemGroup->destroy();
}
itemGroup->Delegate()->update();
}
if(!pi && !mTools.contains(item) && !isBackgroundObject(item))
{
removeItem(item);
curDelegate->remove(false);
removedItems << item;
}
}
break;
}
// force refresh, QT is a bit lazy and take a lot of time (nb item ^2 ?) to trigger repaint
update(sceneRect());
if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented
UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, removedItems, emptyList);
UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, removedItems, QSet<QGraphicsItem*>());
UBApplication::undoStack->push(uc);
}
setDocumentUpdated();
}
void UBGraphicsScene::clearAnnotations()
{
QSet<QGraphicsItem*> emptyList;
QSet<QGraphicsItem*> removedItems;
QListIterator<QGraphicsItem*> itItems(mFastAccessItems);
while (itItems.hasNext())
{
QGraphicsItem* item = itItems.next();
UBGraphicsStrokesGroup* pi = qgraphicsitem_cast<UBGraphicsStrokesGroup*>(item);
if (pi)
{
removeItem(item);
removedItems << item;
}
}
// force refresh, QT is a bit lazy and take a lot of time (nb item ^2 ?) to trigger repaint
update(sceneRect());
if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented
UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, removedItems, emptyList);
UBApplication::undoStack->push(uc);
}
setDocumentUpdated();
}
void UBGraphicsScene::clearBackground()
{
if(mBackgroundObject){
removeItem(mBackgroundObject);
if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented
UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, mBackgroundObject, NULL);
UBApplication::undoStack->push(uc);
}
if (pCase == clearBackground) {
mBackgroundObject = 0;
}
update(sceneRect());
setDocumentUpdated();
}
@ -1365,6 +1325,7 @@ UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QList<QGraphicsItem *
{
UBGraphicsGroupContainerItem *groupItem = new UBGraphicsGroupContainerItem();
addItem(groupItem);
foreach (QGraphicsItem *item, items) {
if (item->type() == UBGraphicsGroupContainerItem::Type) {
QList<QGraphicsItem*> childItems = item->childItems();
@ -1374,13 +1335,14 @@ UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QList<QGraphicsItem *
}
foreach (QGraphicsItem *chItem, childItems) {
groupItem->addToGroup(chItem);
mFastAccessItems.removeAll(chItem);
}
} else {
groupItem->addToGroup(item);
mFastAccessItems.removeAll(item);
}
}
addItem(groupItem);
groupItem->setVisible(true);
groupItem->setFocus();
@ -1397,6 +1359,15 @@ UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QList<QGraphicsItem *
void UBGraphicsScene::addGroup(UBGraphicsGroupContainerItem *groupItem)
{
addItem(groupItem);
for (int i = 0; i < groupItem->childItems().count(); i++)
{
QGraphicsItem *it = qgraphicsitem_cast<QGraphicsItem *>(groupItem->childItems().at(i));
if (it)
{
mFastAccessItems.removeAll(it);
}
}
groupItem->setVisible(true);
groupItem->setFocus();
@ -1565,7 +1536,6 @@ UBGraphicsTextItem *UBGraphicsScene::addTextHtml(const QString &pString, const Q
void UBGraphicsScene::addItem(QGraphicsItem* item)
{
setModified(true);
UBCoreGraphicsScene::addItem(item);
UBGraphicsItem::assignZValue(item, mZLayerController->generateZLevel(item));
@ -1578,8 +1548,6 @@ void UBGraphicsScene::addItem(QGraphicsItem* item)
void UBGraphicsScene::addItems(const QSet<QGraphicsItem*>& items)
{
setModified(true);
foreach(QGraphicsItem* item, items) {
UBCoreGraphicsScene::addItem(item);
UBGraphicsItem::assignZValue(item, mZLayerController->generateZLevel(item));
@ -1592,7 +1560,7 @@ void UBGraphicsScene::addItems(const QSet<QGraphicsItem*>& items)
void UBGraphicsScene::removeItem(QGraphicsItem* item)
{
setModified(true);
item->setSelected(false);
UBCoreGraphicsScene::removeItem(item);
UBApplication::boardController->freezeW3CWidget(item, true);
@ -1604,8 +1572,6 @@ void UBGraphicsScene::removeItem(QGraphicsItem* item)
void UBGraphicsScene::removeItems(const QSet<QGraphicsItem*>& items)
{
setModified(true);
foreach(QGraphicsItem* item, items)
UBCoreGraphicsScene::removeItem(item);
@ -1763,7 +1729,6 @@ void UBGraphicsScene::addRuler(QPointF center)
addItem(ruler);
ruler->setVisible(true);
setModified(true);
}
void UBGraphicsScene::addProtractor(QPointF center)
@ -1781,7 +1746,6 @@ void UBGraphicsScene::addProtractor(QPointF center)
protractor->moveBy(center.x() - itemSceneCenter.x(), center.y() - itemSceneCenter.y());
protractor->setVisible(true);
setModified(true);
}
void UBGraphicsScene::addTriangle(QPointF center)
@ -1799,7 +1763,6 @@ void UBGraphicsScene::addTriangle(QPointF center)
triangle->moveBy(center.x() - itemSceneCenter.x(), center.y() - itemSceneCenter.y());
triangle->setVisible(true);
setModified(true);
}
void UBGraphicsScene::addMagnifier(UBMagnifierParams params)
@ -1858,6 +1821,7 @@ void UBGraphicsScene::moveMagnifier()
{
QPoint magnifierPos = QPoint(magniferControlViewWidget->pos().x() + magniferControlViewWidget->size().width() / 2, magniferControlViewWidget->pos().y() + magniferControlViewWidget->size().height() / 2 );
moveMagnifier(magnifierPos, true);
setModified(true);
}
}
@ -1890,6 +1854,7 @@ void UBGraphicsScene::moveMagnifier(QPoint newPos, bool forceGrab)
void UBGraphicsScene::closeMagnifier()
{
DisposeMagnifierQWidgets();
setModified(true);
}
void UBGraphicsScene::zoomInMagnifier()
@ -1907,6 +1872,7 @@ void UBGraphicsScene::zoomOutMagnifier()
{
magniferControlViewWidget->setZoom(magniferControlViewWidget->params.zoom - 0.5);
magniferDisplayViewWidget->setZoom(magniferDisplayViewWidget->params.zoom - 0.5);
setModified(true);
}
}
@ -1918,6 +1884,7 @@ void UBGraphicsScene::resizedMagnifier(qreal newPercent)
magniferControlViewWidget->grabPoint();
magniferDisplayViewWidget->setSize(newPercent);
magniferDisplayViewWidget->grabPoint();
setModified(true);
}
}
@ -1933,7 +1900,6 @@ void UBGraphicsScene::addCompass(QPointF center)
compass->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool));
compass->setVisible(true);
setModified(true);
}
void UBGraphicsScene::addAristo(QPointF center)
@ -1979,7 +1945,6 @@ void UBGraphicsScene::addMask(const QPointF &center)
curtain->setRect(rect);
curtain->setVisible(true);
curtain->setSelected(true);
setModified(true);
}
void UBGraphicsScene::setRenderingQuality(UBItem::RenderingQuality pRenderingQuality)
@ -2229,7 +2194,6 @@ void UBGraphicsScene::keyReleaseEvent(QKeyEvent * keyEvent)
default:
{
item->setSelected(false);
UBGraphicsItem *ubgi = dynamic_cast<UBGraphicsItem*>(item);
if (0 != ubgi)
ubgi->remove();
@ -2291,6 +2255,11 @@ void UBGraphicsScene::setToolCursor(int tool)
{
deselectAllItems();
}
if (mCurrentStroke && mCurrentStroke->polygons().empty()){
delete mCurrentStroke;
}
mCurrentStroke = NULL;
}
void UBGraphicsScene::initStroke(){

@ -101,6 +101,13 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem
public:
enum clearCase {
clearItemsAndAnnotations = 0
, clearAnnotations
, clearItems
, clearBackground
};
// tmp stub for divide addings scene objects from undo mechanism implementation
void setURStackEnable(bool set = true) {enableUndoRedoStack = set;}
bool isURStackIsEnabled(){ return enableUndoRedoStack;}
@ -114,10 +121,7 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem
UBGraphicsScene* sceneDeepCopy() const;
void clearItemsAndAnnotations();
void clearItems();
void clearAnnotations();
void clearBackground();
void clearContent(clearCase pCase = clearItemsAndAnnotations);
bool inputDevicePress(const QPointF& scenePos, const qreal& pressure = 1.0);
bool inputDeviceMove(const QPointF& scenePos, const qreal& pressure = 1.0);
@ -179,16 +183,6 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem
bool isEmpty() const;
bool isModified() const
{
return mIsModified;
}
void setModified(bool pModified)
{
mIsModified = pModified;
}
void setDocument(UBDocumentProxy* pDocument);
UBDocumentProxy* document() const
@ -381,8 +375,6 @@ public slots:
bool mIsDesktopMode;
qreal mZoomFactor;
bool mIsModified;
QGraphicsItem* mBackgroundObject;
QPointF mPreviousPoint;

@ -32,6 +32,54 @@ void UBGraphicsStrokesGroup::setUuid(const QUuid &pUuid)
UBItem::setUuid(pUuid);
setData(UBGraphicsItemData::ItemUuid, QVariant(pUuid)); //store item uuid inside the QGraphicsItem to fast operations with Items on the scene
}
void UBGraphicsStrokesGroup::setColor(const QColor &color, colorType pColorType)
{
//TODO Implement common mechanism of managing groups, drop UBGraphicsStroke if it's obsolete
//Using casting for the moment
foreach (QGraphicsItem *item, childItems()) {
if (item->type() == UBGraphicsPolygonItem::Type) {
UBGraphicsPolygonItem *curPolygon = static_cast<UBGraphicsPolygonItem *>(item);
switch (pColorType) {
case currentColor :
curPolygon->setColor(color);
break;
case colorOnLightBackground :
curPolygon->setColorOnLightBackground(color);
break;
case colorOnDarkBackground :
curPolygon->setColorOnDarkBackground(color);
break;
}
}
}
}
QColor UBGraphicsStrokesGroup::color(colorType pColorType) const
{
QColor result;
foreach (QGraphicsItem *item, childItems()) {
if (item->type() == UBGraphicsPolygonItem::Type) {
UBGraphicsPolygonItem *curPolygon = static_cast<UBGraphicsPolygonItem *>(item);
switch (pColorType) {
case currentColor :
result = curPolygon->color();
break;
case colorOnLightBackground :
result = curPolygon->colorOnLightBackground();
break;
case colorOnDarkBackground :
result = curPolygon->colorOnDarkBackground();
break;
}
}
}
return result;
}
void UBGraphicsStrokesGroup::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
@ -65,29 +113,30 @@ void UBGraphicsStrokesGroup::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
UBItem* UBGraphicsStrokesGroup::deepCopy() const
{
UBGraphicsStrokesGroup* copy = new UBGraphicsStrokesGroup();
UBGraphicsStrokesGroup* copy = new UBGraphicsStrokesGroup();
QList<QGraphicsItem*> chl = childItems();
QList<QGraphicsItem*> chl = childItems();
foreach(QGraphicsItem *child, chl)
{
UBGraphicsPolygonItem *polygon = dynamic_cast<UBGraphicsPolygonItem*>(child);
if (polygon)
{
copy->addToGroup(dynamic_cast<QGraphicsItem*>(polygon->deepCopy()));
polygon->setStrokesGroup(copy);
}
}
copyItemParameters(copy);
return copy;
return copy;
}
void UBGraphicsStrokesGroup::copyItemParameters(UBItem *copy) const
{
UBGraphicsStrokesGroup *cp = dynamic_cast<UBGraphicsStrokesGroup*>(copy);
{
cp->setPos(this->pos());
cp->setTransform(transform());
cp->setTransform(this->transform());
cp->setFlag(QGraphicsItem::ItemIsMovable, true);
cp->setFlag(QGraphicsItem::ItemIsSelectable, true);
cp->setData(UBGraphicsItemData::ItemLayerType, this->data(UBGraphicsItemData::ItemLayerType));

@ -11,6 +11,12 @@ class UBGraphicsStrokesGroup : public QObject, public QGraphicsItemGroup, public
{
Q_OBJECT
public:
enum colorType {
currentColor = 0
, colorOnLightBackground
, colorOnDarkBackground
};
UBGraphicsStrokesGroup(QGraphicsItem* parent = 0);
~UBGraphicsStrokesGroup();
virtual UBItem* deepCopy() const;
@ -23,6 +29,8 @@ public:
return Type;
}
virtual void setUuid(const QUuid &pUuid);
void setColor(const QColor &color, colorType pColorType = currentColor);
QColor color(colorType pColorType = currentColor) const;
protected:

@ -263,6 +263,11 @@ void UBGraphicsTextItemDelegate::setEditable(bool editable)
mDelegated->setData(UBGraphicsItemData::ItemEditable, QVariant(false));
}
}
void UBGraphicsTextItemDelegate::remove(bool canUndo)
{
UBGraphicsItemDelegate::remove(canUndo);
}
bool UBGraphicsTextItemDelegate::isEditable()
{
return mDelegated->data(UBGraphicsItemData::ItemEditable).toBool();
@ -419,8 +424,8 @@ QVariant UBGraphicsTextItemDelegate::itemChange(QGraphicsItem::GraphicsItemChang
QTextCursor c = delegated()->textCursor();
if (c.hasSelection())
{
c.clearSelection();
delegated()->setTextCursor(c);
c.clearSelection();
delegated()->setTextCursor(c);
}
}
}

@ -46,6 +46,7 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate
public slots:
void contentsChanged();
virtual void setEditable(bool);
virtual void remove(bool canUndo);
protected:
virtual void buildButtons();

@ -17,6 +17,15 @@
#include "core/memcheck.h"
#include "domain/UBGraphicsPixmapItem.h"
#include "domain/UBGraphicsTextItem.h"
#include "domain/UBGraphicsSvgItem.h"
#include "domain/UBGraphicsMediaItem.h"
#include "domain/UBGraphicsStrokesGroup.h"
#include "domain/UBGraphicsGroupContainerItem.h"
#include "domain/UBGraphicsWidgetItem.h"
#include "tools/UBGraphicsCurtainItem.h"
UBItem::UBItem()
: mUuid(QUuid())
, mRenderingQuality(UBItem::RenderingQualityNormal)
@ -44,3 +53,37 @@ bool UBGraphicsItem::isRotatable(QGraphicsItem *item)
{
return item->data(UBGraphicsItemData::ItemRotatable).toBool();
}
UBGraphicsItemDelegate *UBGraphicsItem::Delegate(QGraphicsItem *pItem)
{
UBGraphicsItemDelegate *result = 0;
switch (static_cast<int>(pItem->type())) {
case UBGraphicsPixmapItem::Type :
result = (static_cast<UBGraphicsPixmapItem*>(pItem))->Delegate();
break;
case UBGraphicsTextItem::Type :
result = (static_cast<UBGraphicsTextItem*>(pItem))->Delegate();
break;
case UBGraphicsSvgItem::Type :
result = (static_cast<UBGraphicsSvgItem*>(pItem))->Delegate();
break;
case UBGraphicsMediaItem::Type:
result = (static_cast<UBGraphicsMediaItem*>(pItem))->Delegate();
break;
case UBGraphicsStrokesGroup::Type :
result = (static_cast<UBGraphicsStrokesGroup*>(pItem))->Delegate();
break;
case UBGraphicsGroupContainerItem::Type :
result = (static_cast<UBGraphicsGroupContainerItem*>(pItem))->Delegate();
break;
case UBGraphicsWidgetItem::Type :
result = (static_cast<UBGraphicsWidgetItem*>(pItem))->Delegate();
break;
case UBGraphicsCurtainItem::Type :
result = (static_cast<UBGraphicsCurtainItem*>(pItem))->Delegate();
break;
}
return result;
}

@ -108,6 +108,7 @@ public:
static bool isRotatable(QGraphicsItem *item);
static bool isFlippable(QGraphicsItem *item);
static UBGraphicsItemDelegate *Delegate(QGraphicsItem *pItem);
virtual UBGraphicsItemDelegate *Delegate() const = 0;
virtual void remove() = 0;

@ -23,6 +23,7 @@
UBCoreGraphicsScene::UBCoreGraphicsScene(QObject * parent)
: QGraphicsScene ( parent )
, mIsModified(true)
{
//NOOP
}
@ -30,27 +31,40 @@ UBCoreGraphicsScene::UBCoreGraphicsScene(QObject * parent)
UBCoreGraphicsScene::~UBCoreGraphicsScene()
{
//we must delete removed items that are no more in any scene
foreach (const QGraphicsItem* item, mItemsToDelete)
//at groups deleting some items can be added to mItemsToDelete, so we need to use iterators.
if (mItemsToDelete.count())
{
if (item->scene() == NULL || item->scene() == this)
QSet<QGraphicsItem *>::iterator it = mItemsToDelete.begin();
QGraphicsItem* item = *it;
do
{
delete item;
}
item = *it;
if (item && (item->scene() == NULL || item->scene() == this))
{
mItemsToDelete.remove(*it);
delete item;
}
it = mItemsToDelete.begin();
}while(mItemsToDelete.count());
}
}
void UBCoreGraphicsScene::addItem(QGraphicsItem* item)
{
addItemToDeletion(item);
if (item->type() == UBGraphicsGroupContainerItem::Type && item->childItems().count()) {
foreach (QGraphicsItem *curItem, item->childItems()) {
removeItemFromDeletion(curItem);
}
}
mItemsToDelete << item;
if (item->scene() != this)
QGraphicsScene::addItem(item);
setModified(true);
}
@ -59,27 +73,17 @@ void UBCoreGraphicsScene::removeItem(QGraphicsItem* item, bool forceDelete)
QGraphicsScene::removeItem(item);
if (forceDelete)
{
mItemsToDelete.remove(item);
delete item;
item = 0;
qDebug() << "force delete is " << forceDelete;
deleteItem(item);
}
setModified(true);
}
bool UBCoreGraphicsScene::deleteItem(QGraphicsItem* item)
{
if(mItemsToDelete.contains(item))
{
UBGraphicsItem* item_casted = 0;
switch (item->type())
{
case UBGraphicsMediaItem::Type:
item_casted = dynamic_cast<UBGraphicsMediaItem*>(item);
break;
case UBGraphicsW3CWidgetItem::Type:
item_casted = dynamic_cast<UBGraphicsWidgetItem*>(item);
break;
}
UBGraphicsItem *item_casted = dynamic_cast<UBGraphicsItem *>(item);
if (0 != item_casted)
item_casted->clearSource();

@ -33,8 +33,21 @@ class UBCoreGraphicsScene : public QGraphicsScene
void removeItemFromDeletion(QGraphicsItem* item);
void addItemToDeletion(QGraphicsItem *item);
bool isModified() const
{
return mIsModified;
}
void setModified(bool pModified)
{
mIsModified = pModified;
}
private:
QSet<QGraphicsItem*> mItemsToDelete;
bool mIsModified;
};
#endif /* UBCOREGRAPHICSSCENE_H_ */

@ -171,6 +171,7 @@ class UBPlatformUtils
static int nKeyboardLayouts;
static UBKeyboardLocale** keyboardLayouts;
public:
static void init();
static void destroy();
@ -192,6 +193,10 @@ public:
static UBKeyboardLocale** getKeyboardLayouts(int& nCount);
static QString urlFromClipboard();
static QStringList availableTranslations();
#ifdef Q_WS_MAC
static void SetMacLocaleByIdentifier(const QString& id);
#endif
};

@ -440,6 +440,9 @@ void UBPlatformUtils::initializeKeyboardLayouts()
int count = CFArrayGetCount(kbds);
QList<UBKeyboardLocale*> result;
qDebug() << "initializeKeyboardLayouts";
qDebug() << "Found system locales: " << count;
for(int i=0; i<count; i++)
{
TISInputSourceRef keyLayoutRef = (TISInputSourceRef)CFArrayGetValueAtIndex(kbds, i);
@ -530,6 +533,8 @@ void UBPlatformUtils::initializeKeyboardLayouts()
const QString resName = ":/images/flags/" + name + ".png";
QIcon *iconLang = new QIcon(resName);
qDebug() << "Locale: " << ID << ", name: " << name;
result.append(new UBKeyboardLocale(fullName, name, ID, iconLang, keybt));
}
@ -565,3 +570,28 @@ QString UBPlatformUtils::urlFromClipboard()
*/
return qsRet;
}
void UBPlatformUtils::SetMacLocaleByIdentifier(const QString& id)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
const char * strName = id.toAscii().data();
CFStringRef iName = CFStringCreateWithCString(NULL, strName, kCFStringEncodingMacRoman );
CFStringRef keys[] = { kTISPropertyInputSourceCategory, kTISPropertyInputSourceID };
CFStringRef values[] = { kTISCategoryKeyboardInputSource, iName };
CFDictionaryRef dict = CFDictionaryCreate(NULL, (const void **)keys, (const void **)values, 2, NULL, NULL);
CFArrayRef kbds = TISCreateInputSourceList(dict, true);
if (kbds!=NULL)
{
if (CFArrayGetCount(kbds)!=0)
{
TISInputSourceRef klRef = (TISInputSourceRef)CFArrayGetValueAtIndex(kbds, 0);
if (klRef!=NULL)
TISSelectInputSource(klRef);
}
}
[pool drain];
}

@ -259,7 +259,7 @@ void UBFeaturesWidget::onDisplayMetadata( QMap<QString,QString> metadata )
}break;
}
UBFeature feature( QString(), QImage(previewImageUrl), QString(), metadata["Url"], FEATURE_ITEM );
UBFeature feature( "/root", QImage(previewImageUrl), QString(), metadata["Url"], FEATURE_ITEM );
feature.setMetadata( metadata );
centralWidget->showElement(feature, UBFeaturesCentralWidget::FeaturePropertiesList);
@ -676,7 +676,7 @@ UBFeaturesProgressInfo::UBFeaturesProgressInfo(QWidget *parent) :
void UBFeaturesProgressInfo::setCommmonInfoText(const QString &str)
{
mProgressBar->setFormat(str + tr(" load") + "(%p%)");
mProgressBar->setFormat(tr("Loading ") + str + " (%p%)");
}
void UBFeaturesProgressInfo::setDetailedInfoText(const QString &str)
@ -1080,7 +1080,7 @@ QVariant UBFeaturesModel::data(const QModelIndex &index, int role) const
return QVariant();
if (role == Qt::DisplayRole) {
return featuresList->at(index.row()).getName();
return featuresList->at(index.row()).getDisplayName();
}
else if (role == Qt::DecorationRole) {
@ -1311,7 +1311,7 @@ void UBFeaturesModel::moveData(const UBFeature &source, const UBFeature &destina
}
}
UBFeature newElement( destVirtualPath, sourceIcon, name, QUrl::fromLocalFile(destFullPath), sourceType );
UBFeature newElement( destVirtualPath + "/" + name, sourceIcon, name, QUrl::fromLocalFile(destFullPath), sourceType );
addItem(newElement);
if (deleteManualy) {

@ -60,7 +60,10 @@ UBKeyboardPalette::UBKeyboardPalette(QWidget *parent)
createCtrlButtons();
nCurrentLocale = UBSettings::settings()->KeyboardLocale->get().toInt();
setInput(locales[nCurrentLocale]);
if (nCurrentLocale < 0 || nCurrentLocale >= nLocalesCount)
nCurrentLocale = 0;
if (locales!=NULL)
setInput(locales[nCurrentLocale]);
setContentsMargins( 22, 22, 22, 22 );

@ -57,22 +57,6 @@ void UBKeyboardPalette::createCtrlButtons()
ctrlButtons[8] = new UBLocaleButton(this);
}
void SetMacLocaleByIdentifier(const QString& id)
{
const char * strName = id.toAscii().data();
CFStringRef iName = CFStringCreateWithCString(NULL, strName, kCFStringEncodingMacRoman );
CFStringRef keys[] = { kTISPropertyInputSourceCategory, kTISPropertyInputSourceID };
CFStringRef values[] = { kTISCategoryKeyboardInputSource, iName };
CFDictionaryRef dict = CFDictionaryCreate(NULL, (const void **)keys, (const void **)values, 2, NULL, NULL);
CFArrayRef kbds = TISCreateInputSourceList(dict, true);
if (CFArrayGetCount(kbds)!=0)
{
TISInputSourceRef klRef = (TISInputSourceRef)CFArrayGetValueAtIndex(kbds, 0);
if (klRef!=NULL)
TISSelectInputSource(klRef);
}
}
void UBKeyboardPalette::checkLayout()
@ -107,6 +91,6 @@ void UBKeyboardPalette::onActivated(bool)
void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* locale)
{
SetMacLocaleByIdentifier(locale->id);
UBPlatformUtils::SetMacLocaleByIdentifier(locale->id);
}

@ -25,6 +25,7 @@ UBPropertyPalette::UBPropertyPalette(QWidget *parent, const char *name):UBAction
{
setObjectName(name);
mbGrip = false;
setMaximumHeight(MAX_HEIGHT);
}
/**
@ -35,6 +36,7 @@ UBPropertyPalette::UBPropertyPalette(QWidget *parent, const char *name):UBAction
UBPropertyPalette::UBPropertyPalette(Qt::Orientation orientation, QWidget *parent):UBActionPalette(orientation, parent)
{
mbGrip = false;
setMaximumHeight(MAX_HEIGHT);
}
/**

@ -20,6 +20,8 @@
#include "UBActionPalette.h"
#define MAX_HEIGHT 20
class UBPropertyPalette : public UBActionPalette
{
Q_OBJECT

@ -685,6 +685,7 @@ UBTeacherGuidePageZeroWidget::UBTeacherGuidePageZeroWidget(QWidget* parent, cons
mpSessionTitle = new UBTGAdaptableText(0, this, "UBTGSessionTitle");
mpSessionTitle->setPlaceHolderText(tr("Type session title here ..."));
mpButtonTitleLayout->addWidget(mpSessionTitle);
connect(this, SIGNAL(resized()), mpSessionTitle, SLOT(onTextChanged()));
mpLayout->addLayout(mpButtonTitleLayout);
@ -703,6 +704,7 @@ UBTeacherGuidePageZeroWidget::UBTeacherGuidePageZeroWidget(QWidget* parent, cons
mpAuthors->setObjectName("UBTGZeroPageInputText");
mpAuthors->setPlaceHolderText(tr("Type authors here ..."));
mpLayout->addWidget(mpAuthors);
connect(this, SIGNAL(resized()), mpAuthors, SLOT(onTextChanged()));
mpCreationLabel = new QLabel(this);
mpCreationLabel->setObjectName("UBTGZeroPageDateLabel");
@ -727,6 +729,7 @@ UBTeacherGuidePageZeroWidget::UBTeacherGuidePageZeroWidget(QWidget* parent, cons
mpObjectives->setObjectName("UBTGZeroPageInputText");
mpObjectives->setPlaceHolderText(tr("Type objectives here..."));
mpLayout->addWidget(mpObjectives);
connect(this, SIGNAL(resized()), mpObjectives, SLOT(onTextChanged()));
mpSeparatorObjectives = new QFrame(this);
mpSeparatorObjectives->setFixedHeight(UBTG_SEPARATOR_FIXED_HEIGHT);
@ -747,6 +750,7 @@ UBTeacherGuidePageZeroWidget::UBTeacherGuidePageZeroWidget(QWidget* parent, cons
mpKeywords = new UBTGAdaptableText(0, this);
mpKeywords->setPlaceHolderText(tr("Type keywords here ..."));
mpLayout->addWidget(mpKeywords);
connect(this, SIGNAL(resized()), mpKeywords, SLOT(onTextChanged()));
mpSchoolLevelItemLabel = new QLabel(this);
mpSchoolLevelItemLabel->setObjectName("UBTGZeroPageItemLabel");
@ -1122,6 +1126,12 @@ bool UBTeacherGuidePageZeroWidget::isModified()
return result;
}
void UBTeacherGuidePageZeroWidget::resizeEvent(QResizeEvent* ev){
emit resized();
QWidget::resizeEvent(ev);
}
/***************************************************************************
* class UBTeacherGuideWidget *
***************************************************************************/
@ -1238,3 +1248,4 @@ bool UBTeacherGuideWidget::isModified()
else
return mpEditionWidget->isModified();
}

@ -136,11 +136,16 @@ public:
QVector<tUBGEElementNode*> getData();
bool isModified();
signals:
void resized();
public slots:
void onActiveSceneChanged();
void switchToMode(tUBTGZeroPageMode mode = tUBTGZeroPageMode_EDITION);
protected:
void resizeEvent(QResizeEvent* ev);
private:
void fillComboBoxes();
void loadData();

@ -174,6 +174,7 @@ void UBTGAdaptableText::showEvent(QShowEvent* e)
if(!mIsUpdatingSize && mHasPlaceHolder && toPlainText().isEmpty())
setPlainText(mPlaceHolderText);
else
// If the teacherguide is collapsed, don't updated the size. Or set the size as the expanded size
onTextChanged();
}
@ -188,9 +189,12 @@ QString UBTGAdaptableText::text()
void UBTGAdaptableText::onTextChanged()
{
//qDebug() << ">> onTextChanged CALLED!";
qreal documentSize = document()->size().height();
if(height() == documentSize + mBottomMargin)
return;
//qDebug() << ">> documentSize: " << documentSize << ", height: " << height();
if(height() == documentSize + mBottomMargin){
return;
}
mIsUpdatingSize = true;
@ -208,6 +212,7 @@ void UBTGAdaptableText::onTextChanged()
setFocus();
}
mIsUpdatingSize = false;
}
void UBTGAdaptableText::setInitialText(const QString& text)
{

@ -12,11 +12,13 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QObject>
#include <QString>
#include <QCursor>
#include "UBThumbnailWidget.h"
#include "UBRubberBand.h"
#include "UBMainWindow.h"
#include "board/UBBoardController.h"
@ -858,7 +860,9 @@ void UBSceneThumbnailNavigPixmap::updateButtonsState()
void UBSceneThumbnailNavigPixmap::deletePage()
{
UBApplication::boardController->deleteScene(sceneIndex());
if(UBApplication::mainWindow->yesNoQuestion(QObject::tr("Remove Page"), QObject::tr("Are you sure you want to remove 1 page from the selected document '%0'?").arg(UBApplication::documentController->selectedDocument()->metaData(UBSettings::documentName).toString()))){
UBApplication::boardController->deleteScene(sceneIndex());
}
}
void UBSceneThumbnailNavigPixmap::duplicatePage()

@ -733,6 +733,7 @@ bool UBWebController::isEduMedia(const QUrl& pUrl)
void UBWebController::loadUrl(const QUrl& url)
{
bool webBrowserAlreadyInstanciated = dynamic_cast<WBBrowserWindow*>(mStackedWidget->widget(WebBrowser)) != NULL;
UBApplication::applicationController->showInternet();
if (UBSettings::settings()->webUseExternalBrowser->get().toBool())
{
@ -740,8 +741,6 @@ void UBWebController::loadUrl(const QUrl& url)
}
else
{
bool webBrowserAlreadyInstanciated = mStackedWidget->widget(WebBrowser) != NULL;
if (!webBrowserAlreadyInstanciated) {
(*mCurrentWebBrowser)->loadUrl(url);
}

@ -270,28 +270,6 @@ void WBBrowserWindow::setupToolBarForTutorial()
if (tb && tb->menu())
tb->setMenu(NULL);
}
// mTabWidget->addWebAction(mUniboardMainWindow->actionWebReload, QWebPage::Reload);
// mTabWidget->addWebAction(mUniboardMainWindow->actionStopLoading, QWebPage::Stop);
// mWebToolBar->insertWidget(mUniboardMainWindow->actionWebBigger, mTabWidget->lineEditStack());
// mSearchToolBar = new WBToolbarSearch(mWebToolBar);
// mSearchAction = mWebToolBar->insertWidget(mUniboardMainWindow->actionWebBigger, mSearchToolBar);
// connect(mSearchToolBar, SIGNAL(search(const QUrl&)), SLOT(loadUrl(const QUrl&)));
// mChaseWidget = new WBChaseWidget(this);
// mWebToolBar->insertWidget(mUniboardMainWindow->actionWebBigger, mChaseWidget);
// mWebToolBar->insertSeparator(mUniboardMainWindow->actionWebBigger);
// connect(mUniboardMainWindow->actionHome, SIGNAL(triggered()), this , SLOT(slotHome()));
// connect(mUniboardMainWindow->actionBookmarks, SIGNAL(triggered()), this , SLOT(bookmarks()));
// connect(mUniboardMainWindow->actionAddBookmark, SIGNAL(triggered()), this , SLOT(addBookmark()));
// connect(mUniboardMainWindow->actionWebBigger, SIGNAL(triggered()), this , SLOT(slotViewZoomIn()));
// connect(mUniboardMainWindow->actionWebSmaller, SIGNAL(triggered()), this , SLOT(slotViewZoomOut()));
mWebToolBar->show();
}
@ -662,4 +640,4 @@ void WBBrowserWindow::openActionUrl(QAction *action)
history->goToItem(history->backItems(-1*offset).first());
else if (offset > 0)
history->goToItem(history->forwardItems(history->count() - offset + 1).back());
}
}

Loading…
Cancel
Save