Commit ec85baff authored by Claudio Valerio's avatar Claudio Valerio

Merge branch 'develop' of github.com:OpenEducationFoundation/OpenBoard into develop

parents 280789c9 c8145a6e
......@@ -42,6 +42,7 @@
#include "domain/UBGraphicsStroke.h"
#include "domain/UBGraphicsStrokesGroup.h"
#include "domain/UBGraphicsGroupContainerItem.h"
#include "domain/UBGraphicsGroupContainerItemDelegate.h"
#include "domain/UBItem.h"
#include "tools/UBGraphicsRuler.h"
......@@ -924,7 +925,13 @@ void UBSvgSubsetAdaptor::UBSvgSubsetReader::readGroupRoot()
}
else if (mXmlReader.isStartElement()) {
if (mXmlReader.name() == tGroup) {
QString ubLocked = mXmlReader.attributes().value(UBSettings::uniboardDocumentNamespaceUri, "locked").toString();
UBGraphicsGroupContainerItem *curGroup = readGroup();
if (!ubLocked.isEmpty())
{
bool isLocked = ubLocked.contains(xmlTrue);
curGroup->Delegate()->setLocked(isLocked);
}
if (curGroup) {
mScene->addGroup(curGroup);
}
......@@ -1276,6 +1283,9 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex)
if (curElement.hasAttribute(aId)) {
mXmlWriter.writeStartElement(curElement.tagName());
mXmlWriter.writeAttribute(aId, curElement.attribute(aId));
if(curElement.hasAttribute("locked")){
mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri,"locked",curElement.attribute("locked"));
}
QDomElement curSubElement = curElement.firstChildElement();
while (!curSubElement.isNull()) {
if (curSubElement.hasAttribute(aId)) {
......@@ -1320,6 +1330,13 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistGroupToDom(QGraphicsItem *gro
if (!uuid.isNull()) {
QDomElement curGroupElement = groupDomDocument->createElement(tGroup);
curGroupElement.setAttribute(aId, uuid);
UBGraphicsGroupContainerItem* group = dynamic_cast<UBGraphicsGroupContainerItem*>(groupItem);
if(group && group->Delegate()){
if(group->Delegate()->isLocked())
curGroupElement.setAttribute("locked", xmlTrue);
else
curGroupElement.setAttribute("locked", xmlFalse);
}
curParent->appendChild(curGroupElement);
foreach (QGraphicsItem *item, groupItem->childItems()) {
QUuid tmpUuid = UBGraphicsScene::getPersonalUuid(item);
......
......@@ -1634,7 +1634,7 @@ void UBBoardController::adjustDisplayViews()
int UBBoardController::autosaveTimeoutFromSettings()
{
int value = UBSettings::settings()->timerInterval->get().toInt();
int value = UBSettings::settings()->autoSaveInterval->get().toInt();
int minute = 60 * 1000;
return value * minute;
......@@ -1773,8 +1773,8 @@ void UBBoardController::autosaveTimeout()
void UBBoardController::appMainModeChanged(UBApplicationController::MainMode md)
{
int timerInterval = autosaveTimeoutFromSettings();
if (!timerInterval) {
int autoSaveInterval = autosaveTimeoutFromSettings();
if (!autoSaveInterval) {
return;
}
......@@ -1784,7 +1784,7 @@ void UBBoardController::appMainModeChanged(UBApplicationController::MainMode md)
}
if (md == UBApplicationController::Board) {
mAutosaveTimer->start(timerInterval);
mAutosaveTimer->start(autoSaveInterval);
} else if (mAutosaveTimer->isActive()) {
mAutosaveTimer->stop();
}
......
......@@ -243,7 +243,7 @@ void UBBoardPaletteManager::setupPalettes()
mStylusPalette->stackUnder(mZoomPalette);
mTipPalette = new UBStartupHintsPalette(mContainer);
//mTipPalette = new UBStartupHintsPalette(mContainer);
QList<QAction*> backgroundsActions;
backgroundsActions << UBApplication::mainWindow->actionPlainLightBackground;
......
......@@ -353,7 +353,7 @@ void UBSettings::init()
boardShowToolsPalette = new UBSetting(this, "Board", "ShowToolsPalette", "false");
magnifierDrawingMode = new UBSetting(this, "Board", "MagnifierDrawingMode", "0");
timerInterval = new UBSetting(this, "Board", "Timer interval", "5");
autoSaveInterval = new UBSetting(this, "Board", "AutoSaveIntervalInMinutes", "3");
svgViewBoxMargin = new UBSetting(this, "SVG", "ViewBoxMargin", "50");
......
......@@ -373,7 +373,7 @@ class UBSettings : public QObject
UBSetting* libIconSize;
UBSetting* magnifierDrawingMode;
UBSetting* timerInterval;
UBSetting* autoSaveInterval;
public slots:
......
......@@ -79,9 +79,14 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item)
if (UBGraphicsItem::isRotatable(this) && !UBGraphicsItem::isRotatable(item)) {
Delegate()->setUBFlag(GF_REVOLVABLE, false);
}
} else {
if (!UBGraphicsItem::isLocked(this) && UBGraphicsItem::isLocked(item)) {
Delegate()->setLocked(true);
}
}
else {
Delegate()->setUBFlag(GF_FLIPPABLE_ALL_AXIS, UBGraphicsItem::isFlippable(item));
Delegate()->setUBFlag(GF_REVOLVABLE, UBGraphicsItem::isRotatable(item));
Delegate()->setLocked(UBGraphicsItem::isLocked(item));
}
// COMBINE
......@@ -322,6 +327,7 @@ void UBGraphicsGroupContainerItem::pRemoveFromGroup(QGraphicsItem *item)
if (!UBGraphicsItem::isFlippable(item) || !UBGraphicsItem::isRotatable(item)) {
bool flippableNow = true;
bool rotatableNow = true;
bool lockedNow = false;
foreach (QGraphicsItem *item, childItems()) {
if (!UBGraphicsItem::isFlippable(item)) {
......@@ -330,12 +336,17 @@ void UBGraphicsGroupContainerItem::pRemoveFromGroup(QGraphicsItem *item)
if (!UBGraphicsItem::isRotatable(item)) {
rotatableNow = false;
}
if (!rotatableNow && !flippableNow) {
if(UBGraphicsItem::isLocked(item))
lockedNow = true;
if (!rotatableNow && !flippableNow && lockedNow) {
break;
}
}
Delegate()->setUBFlag(GF_FLIPPABLE_ALL_AXIS, flippableNow);
Delegate()->setUBFlag(GF_REVOLVABLE, rotatableNow);
Delegate()->setLocked(lockedNow);
}
}
......
......@@ -715,6 +715,15 @@ void UBGraphicsItemDelegate::showMenu()
mMenu->exec(cv->mapToGlobal(pinPos.bottomRight()));
}
void UBGraphicsItemDelegate::setLocked(bool pLocked)
{
Q_ASSERT(mDelegated);
if (mDelegated) {
mDelegated->setData(UBGraphicsItemData::ItemLocked, QVariant(pLocked));
}
}
void UBGraphicsItemDelegate::updateFrame()
{
if (mFrame && !mFrame->scene() && mDelegated->scene())
......
......@@ -279,6 +279,7 @@ class UBGraphicsItemDelegate : public QObject
void setMimeData(QMimeData* mimeData);
void setDragPixmap(const QPixmap &pix) {mDragPixmap = pix;}
void setLocked(bool pLocked);
void setButtonsVisible(bool visible);
UBGraphicsToolBarItem* getToolBarItem() const { return mToolBarItem; }
......
......@@ -59,7 +59,7 @@ void UBGraphicsItemZLevelUndoCommand::undo(){
if(mDest == UBZLayerController::down || mDest == UBZLayerController::bottom){
// Move up
QList<QGraphicsItem*>::iterator downIt = mItems.end();
for(downIt; downIt >= mItems.begin(); downIt--){
for(; downIt >= mItems.begin(); downIt--){
for(int i=0; i<zDiff; i++)
mpScene->changeZLevelTo(*downIt, UBZLayerController::up);
}
......
This diff is collapsed.
......@@ -37,6 +37,64 @@
class UBGraphicsTextItem;
class AlignTextButton : public DelegateButton
{
Q_OBJECT
public:
static const int MAX_KIND = 3;
enum kind_t{
k_left = 0
, k_center
, k_right
, k_mixed
};
AlignTextButton(const QString & fileName, QGraphicsItem* pDelegated, QGraphicsItem * parent = 0, Qt::WindowFrameSection section = Qt::TopLeftSection);
virtual ~AlignTextButton();
void setKind(int pKind);
int kind() {return mKind;}
void setNextKind();
int nextKind() const;
void setMixedButtonVisible(bool v = true) {mHideMixed = !v;}
bool isMixedButtonVisible() {return !mHideMixed;}
private:
QSvgRenderer *rndFromKind(int pknd)
{
switch (pknd) {
case k_left:
return lft;
break;
case k_center:
return cntr;
break;
case k_right:
return rght;
break;
case k_mixed:
return mxd;
break;
}
return 0;
}
QSvgRenderer *curRnd() {return rndFromKind(mKind);}
QPointer<QSvgRenderer> lft;
QPointer<QSvgRenderer> cntr;
QPointer<QSvgRenderer> rght;
QPointer<QSvgRenderer> mxd;
int mKind;
bool mHideMixed;
};
class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate
{
Q_OBJECT
......@@ -67,8 +125,11 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate
virtual void positionHandles();
private:
virtual bool mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual bool mouseMoveEvent(QGraphicsSceneMouseEvent *event);
virtual bool mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
private:
UBGraphicsTextItem* delegated();
DelegateButton* mFontButton;
......@@ -76,10 +137,7 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate
DelegateButton* mDecreaseSizeButton;
DelegateButton* mIncreaseSizeButton;
DelegateButton* mAlignLeftButton;
DelegateButton* mAlignCenterButton;
DelegateButton* mAlignRightButton;
DelegateButton* mAlighMixed;
DelegateButton* mAlignButton;
int mLastFontPixelSize;
......@@ -89,9 +147,26 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate
private:
void customize(QFontDialog &fontDialog);
void ChangeTextSize(qreal factor, textChangeMode changeMode);
void updateAlighButtonState();
bool oneBlockSelection();
void saveTextCursorFormats();
void restoreTextCursorFormats();
QFont createDefaultFont();
QAction *mEditableAction;
struct selectionData_t {
selectionData_t()
: mButtonIsPressed(false)
{}
bool mButtonIsPressed;
int position;
int anchor;
QString html;
QTextDocumentFragment selection;
QList<QTextBlockFormat> fmts;
} mSelectionData;
private slots:
......@@ -101,9 +176,12 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate
void decreaseSize();
void increaseSize();
void alignButtonProcess();
void onCursorPositionChanged(const QTextCursor& cursor);
void onModificationChanged(bool ch);
private:
const int delta;
};
#endif /* UBGRAPHICSTEXTITEMDELEGATE_H_ */
......@@ -565,12 +565,9 @@ void UBGraphicsWidgetItem::injectInlineJavaScript()
void UBGraphicsWidgetItem::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
if (scene() && scene()->renderingContext() != UBGraphicsScene::Screen) {
painter->drawPixmap(0, 0, snapshot());
}
else {
QGraphicsWebView::paint(painter, option, widget);
}
QGraphicsWebView::paint(painter, option, widget);
if (!mInitialLoadDone) {
QString message;
......
......@@ -85,6 +85,11 @@ bool UBGraphicsItem::isRotatable(QGraphicsItem *item)
return item->data(UBGraphicsItemData::ItemRotatable).toBool();
}
bool UBGraphicsItem::isLocked(QGraphicsItem *item)
{
return item->data(UBGraphicsItemData::ItemLocked).toBool();
}
QUuid UBGraphicsItem::getOwnUuid(QGraphicsItem *item)
{
QString idCandidate = item->data(UBGraphicsItemData::ItemUuid).toString();
......
......@@ -116,6 +116,7 @@ public:
static void assignZValue(QGraphicsItem*, qreal value);
static bool isRotatable(QGraphicsItem *item);
static bool isFlippable(QGraphicsItem *item);
static bool isLocked(QGraphicsItem *item);
static QUuid getOwnUuid(QGraphicsItem *item);
static UBGraphicsItemDelegate *Delegate(QGraphicsItem *pItem);
......
......@@ -261,7 +261,7 @@ void UBDocumentTreeWidget::dropEvent(QDropEvent *event)
UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>(ti);
if (pi)
{
if (mSelectedProxyTi->proxy()->metaData(UBSettings::documentUpdatedAt).toString() >= pi->proxy()->metaData(UBSettings::documentUpdatedAt).toString())
if (mSelectedProxyTi->proxy()->metaData(UBSettings::documentDate).toString() >= pi->proxy()->metaData(UBSettings::documentDate).toString())
{
break;
}
......@@ -380,7 +380,7 @@ void UBDocumentTreeWidget::documentUpdated(UBDocumentProxy *pDocument)
UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>(ti);
if (pi)
{
if (pDocument->metaData(UBSettings::documentUpdatedAt).toString() >= pi->proxy()->metaData(UBSettings::documentUpdatedAt).toString())
if (pDocument->metaData(UBSettings::documentDate).toString() >= pi->proxy()->metaData(UBSettings::documentDate).toString())
{
bool selected = treeItem->isSelected();
parent->removeChild(treeItem);
......@@ -416,7 +416,7 @@ UBDocumentProxyTreeItem::UBDocumentProxyTreeItem(QTreeWidgetItem * parent, UBDoc
UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>(ti);
if (pi)
{
if (proxy->metaData(UBSettings::documentUpdatedAt).toString() >= pi->proxy()->metaData(UBSettings::documentUpdatedAt).toString())
if (proxy->metaData(UBSettings::documentDate).toString() >= pi->proxy()->metaData(UBSettings::documentDate).toString())
{
break;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment