Commit e6b64d6e authored by Claudio Valerio's avatar Claudio Valerio

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

parents 297eca66 832ebaac
...@@ -11,7 +11,7 @@ CONFIG += debug_and_release \ ...@@ -11,7 +11,7 @@ CONFIG += debug_and_release \
VERSION_MAJ = 1 VERSION_MAJ = 1
VERSION_MIN = 03 VERSION_MIN = 03
VERSION_TYPE = a # a = alpha, b = beta, rc = release candidate, r = release, other => error VERSION_TYPE = a # a = alpha, b = beta, rc = release candidate, r = release, other => error
VERSION_PATCH = 00 VERSION_PATCH = 01
VERSION = "$${VERSION_MAJ}.$${VERSION_MIN}.$${VERSION_TYPE}.$${VERSION_PATCH}" VERSION = "$${VERSION_MAJ}.$${VERSION_MIN}.$${VERSION_TYPE}.$${VERSION_PATCH}"
VERSION = $$replace(VERSION, "\\.r", "") VERSION = $$replace(VERSION, "\\.r", "")
......
...@@ -380,3 +380,9 @@ QLineEdit#ubWebBrowserLineEdit ...@@ -380,3 +380,9 @@ QLineEdit#ubWebBrowserLineEdit
padding: 2 2px; padding: 2 2px;
background: white; background: white;
} }
QSplitter
{
background-color: #b3b3b3;
width : 15px;
...@@ -40,8 +40,15 @@ ...@@ -40,8 +40,15 @@
<property name="lineWidth"> <property name="lineWidth">
<number>0</number> <number>0</number>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QVBoxLayout" name="verticalLayout_4">
<item> <item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="childrenCollapsible">
<bool>false</bool>
</property>
<widget class="QFrame" name="topLeftFrame"> <widget class="QFrame" name="topLeftFrame">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred"> <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
...@@ -65,11 +72,17 @@ ...@@ -65,11 +72,17 @@
<item> <item>
<widget class="UBDocumentTreeWidget" name="documentTreeWidget"> <widget class="UBDocumentTreeWidget" name="documentTreeWidget">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Expanding"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize">
<size>
<width>250</width>
<height>0</height>
</size>
</property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true"/> <string notr="true"/>
</property> </property>
...@@ -103,8 +116,6 @@ ...@@ -103,8 +116,6 @@
</item> </item>
</layout> </layout>
</widget> </widget>
</item>
<item>
<widget class="QWidget" name="topRightFrame" native="true"> <widget class="QWidget" name="topRightFrame" native="true">
<property name="styleSheet"> <property name="styleSheet">
<string notr="true"/> <string notr="true"/>
...@@ -115,6 +126,12 @@ ...@@ -115,6 +126,12 @@
</property> </property>
<item> <item>
<widget class="UBDocumentThumbnailWidget" name="thumbnailWidget"> <widget class="UBDocumentThumbnailWidget" name="thumbnailWidget">
<property name="minimumSize">
<size>
<width>250</width>
<height>0</height>
</size>
</property>
<property name="contextMenuPolicy"> <property name="contextMenuPolicy">
<enum>Qt::NoContextMenu</enum> <enum>Qt::NoContextMenu</enum>
</property> </property>
...@@ -224,6 +241,7 @@ ...@@ -224,6 +241,7 @@
</item> </item>
</layout> </layout>
</widget> </widget>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>
...@@ -243,8 +261,6 @@ ...@@ -243,8 +261,6 @@
<header>gui/UBDocumentTreeWidget.h</header> <header>gui/UBDocumentTreeWidget.h</header>
</customwidget> </customwidget>
</customwidgets> </customwidgets>
<resources> <resources/>
<include location="../OpenBoard.qrc"/>
</resources>
<connections/> <connections/>
</ui> </ui>
...@@ -148,7 +148,7 @@ ...@@ -148,7 +148,7 @@
<attribute name="toolBarBreak"> <attribute name="toolBarBreak">
<bool>true</bool> <bool>true</bool>
</attribute> </attribute>
<addaction name="actionDocumentTools"/> <addaction name="actionVirtualKeyboard"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionNewDocument"/> <addaction name="actionNewDocument"/>
<addaction name="actionNewFolder"/> <addaction name="actionNewFolder"/>
......
...@@ -128,7 +128,7 @@ void UBSceneCache::removeScene(UBDocumentProxy* proxy, int pageIndex) ...@@ -128,7 +128,7 @@ void UBSceneCache::removeScene(UBDocumentProxy* proxy, int pageIndex)
{ {
UBGraphicsScene* scene = value(proxy, pageIndex); UBGraphicsScene* scene = value(proxy, pageIndex);
if (scene && scene->views().size() == 0) if (scene && !scene->isActive())
{ {
UBSceneCacheID key(proxy, pageIndex); UBSceneCacheID key(proxy, pageIndex);
int count = QHash<UBSceneCacheID, UBGraphicsScene*>::remove(key); int count = QHash<UBSceneCacheID, UBGraphicsScene*>::remove(key);
......
This diff is collapsed.
...@@ -66,6 +66,8 @@ class UBDocumentController : public UBDocumentContainer ...@@ -66,6 +66,8 @@ class UBDocumentController : public UBDocumentContainer
QString documentTrashGroupName(){ return mDocumentTrashGroupName;} QString documentTrashGroupName(){ return mDocumentTrashGroupName;}
QString defaultDocumentGroupName(){ return mDefaultDocumentGroupName;} QString defaultDocumentGroupName(){ return mDefaultDocumentGroupName;}
void treeGroupItemRenamed(QString& oldPath,QString& newPath);
signals: signals:
void exportDone(); void exportDone();
...@@ -128,6 +130,14 @@ class UBDocumentController : public UBDocumentContainer ...@@ -128,6 +130,14 @@ class UBDocumentController : public UBDocumentContainer
QString mDocumentTrashGroupName; QString mDocumentTrashGroupName;
QString mDefaultDocumentGroupName; QString mDefaultDocumentGroupName;
UBDocumentGroupTreeItem *getCommonGroupItem(QString& path);
QMap<QString, UBDocumentGroupTreeItem*> mMapOfPaths;
UBDocumentGroupTreeItem* getParentTreeItem(QString& documentGroup);
QList<UBDocumentProxyTreeItem*> getProxies(QTreeWidgetItem *groupItem);
QList<UBDocumentGroupTreeItem*> getGroupTreeItem(QTreeWidgetItem* groupItem);
private slots: private slots:
void documentZoomSliderValueChanged (int value); void documentZoomSliderValueChanged (int value);
void loadDocumentProxies(); void loadDocumentProxies();
......
...@@ -56,7 +56,7 @@ void UBDocumentProxy::init() ...@@ -56,7 +56,7 @@ void UBDocumentProxy::init()
setMetaData(UBSettings::documentGroupName, ""); setMetaData(UBSettings::documentGroupName, "");
QDateTime now = QDateTime::currentDateTime(); QDateTime now = QDateTime::currentDateTime();
setMetaData(UBSettings::documentName, now.toString(Qt::SystemLocaleShortDate)); setMetaData(UBSettings::documentName, now.toString(Qt::ISODate));
setUuid(QUuid::createUuid()); setUuid(QUuid::createUuid());
......
...@@ -22,10 +22,10 @@ ...@@ -22,10 +22,10 @@
* along with OpenBoard. If not, see <http://www.gnu.org/licenses/>. * along with OpenBoard. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "UBDocumentTreeWidget.h" #include "UBDocumentTreeWidget.h"
#include "document/UBDocumentProxy.h" #include "document/UBDocumentProxy.h"
//#include "document/UBDocumentContainer.h"
#include "core/UBSettings.h" #include "core/UBSettings.h"
#include "core/UBApplication.h" #include "core/UBApplication.h"
...@@ -33,6 +33,9 @@ ...@@ -33,6 +33,9 @@
#include "core/UBMimeData.h" #include "core/UBMimeData.h"
#include "core/UBApplicationController.h" #include "core/UBApplicationController.h"
#include "core/UBDocumentManager.h" #include "core/UBDocumentManager.h"
#include "gui/UBMainWindow.h"
#include "document/UBDocumentController.h" #include "document/UBDocumentController.h"
#include "adaptors/UBThumbnailAdaptor.h" #include "adaptors/UBThumbnailAdaptor.h"
...@@ -41,22 +44,23 @@ ...@@ -41,22 +44,23 @@
#include "core/memcheck.h" #include "core/memcheck.h"
#include <QTimer>
UBDocumentTreeWidget::UBDocumentTreeWidget(QWidget * parent) UBDocumentTreeWidget::UBDocumentTreeWidget(QWidget * parent)
: QTreeWidget(parent) : QTreeWidget(parent)
, mSelectedProxyTi(0) , mSelectedProxyTi(0)
, mDropTargetProxyTi(0) , mDropTargetProxyTi(0)
, mLastItemCompletePath("")
{ {
setDragDropMode(QAbstractItemView::InternalMove); setDragDropMode(QAbstractItemView::InternalMove);
setAutoScroll(true); setAutoScroll(true);
mScrollTimer = new QTimer(this); mScrollTimer = new QTimer(this);
connect(UBDocumentManager::documentManager(), SIGNAL(documentUpdated(UBDocumentProxy*)) connect(UBDocumentManager::documentManager(), SIGNAL(documentUpdated(UBDocumentProxy*)), this, SLOT(documentUpdated(UBDocumentProxy*)));
, this, SLOT(documentUpdated(UBDocumentProxy*)));
connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)) connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)) , this, SLOT(itemChangedValidation(QTreeWidgetItem *, int)));
, this, SLOT(itemChangedValidation(QTreeWidgetItem *, int))); connect(mScrollTimer, SIGNAL(timeout()) , this, SLOT(autoScroll()));
connect(mScrollTimer, SIGNAL(timeout()) connect(this,SIGNAL(itemPressed(QTreeWidgetItem*,int)),this,SLOT(onItemPressed(QTreeWidgetItem*,int)));
, this, SLOT(autoScroll()));
} }
...@@ -66,30 +70,89 @@ UBDocumentTreeWidget::~UBDocumentTreeWidget() ...@@ -66,30 +70,89 @@ UBDocumentTreeWidget::~UBDocumentTreeWidget()
} }
void UBDocumentTreeWidget::onItemPressed(QTreeWidgetItem* item, int column)
{
Q_UNUSED(column)
UBDocumentGroupTreeItem* group = dynamic_cast<UBDocumentGroupTreeItem *>(item);
if(group){
mLastItemCompletePath = group->buildEntirePath();
mLastItemName = group->groupName();
}
}
void UBDocumentTreeWidget::itemChangedValidation(QTreeWidgetItem * item, int column) void UBDocumentTreeWidget::itemChangedValidation(QTreeWidgetItem * item, int column)
{ {
if (column == 0)
{
UBDocumentGroupTreeItem *group = dynamic_cast< UBDocumentGroupTreeItem *>(item);
if (group) QString emptyNameWarningTitle = tr("Empty name");
QString emptyNameWarningText = tr("The name should not be empty. Please enter a valid name.");
QString alreadyExistsNameWarningTitle = tr("Name already used");
QString alreadyExistsNameWarningText = tr("The actual name is in conflict with and existing. Please choose another one.");
UBDocumentProxyTreeItem* treeItem = dynamic_cast< UBDocumentProxyTreeItem *>(item);
if (treeItem)
{ {
QString name = group->text(0); QString name = treeItem->text(column);
if(name.isEmpty()){
mFailedValidationForTreeItem = item;
mFailedValidationItemColumn = column;
UBApplication::mainWindow->warning(emptyNameWarningTitle,emptyNameWarningText);
QTimer::singleShot(100,this,SLOT(validationFailed()));
return;
}
}
for(int i = 0; i < topLevelItemCount (); i++)
UBDocumentGroupTreeItem* group = dynamic_cast<UBDocumentGroupTreeItem *>(item);
if(group)
{ {
QTreeWidgetItem *someTopLevelItem = topLevelItem(i); QString name = group->text(column);
if(name.isEmpty()){
mFailedValidationForTreeItem = item;
mFailedValidationItemColumn = column;
UBApplication::mainWindow->warning(emptyNameWarningTitle,emptyNameWarningText);
QTimer::singleShot(100,this,SLOT(validationFailed()));
return;
}
if (someTopLevelItem != group && if(group->parent()){
someTopLevelItem->text(0) == name) for(int i = 0; i < group->parent()->childCount(); i++)
{ {
group->setText(0, tr("%1 (copy)").arg(name)); QTreeWidgetItem* childAtPosition = group->parent()->child(i);
if (childAtPosition != item && childAtPosition->text(column) == name){
UBApplication::mainWindow->warning(alreadyExistsNameWarningTitle,alreadyExistsNameWarningText);
mFailedValidationForTreeItem = item;
mFailedValidationItemColumn = column;
QTimer::singleShot(100,this,SLOT(validationFailed()));
return;
} }
} }
} }
else{
// We are looking at the top level items;
for(int i = 0; i < topLevelItemCount(); i += 1){
if(topLevelItem(i) != item && dynamic_cast<UBDocumentGroupTreeItem*>(topLevelItem(i))->groupName() == group->groupName()){
UBApplication::mainWindow->warning(tr("Name already in use"),tr("Please choose another name for the directory. The chosed name is already used."));
mFailedValidationForTreeItem = item;
mFailedValidationItemColumn = column;
QTimer::singleShot(100,this,SLOT(validationFailed()));
return;
}
}
}
QString newPath = group->buildEntirePath();
group->updateChildrenPath(column, mLastItemCompletePath, newPath);
UBApplication::documentController->treeGroupItemRenamed(mLastItemCompletePath, newPath);
} }
} }
void UBDocumentTreeWidget::validationFailed()
{
editItem(mFailedValidationForTreeItem,mFailedValidationItemColumn);
}
Qt::DropActions UBDocumentTreeWidget::supportedDropActions() const Qt::DropActions UBDocumentTreeWidget::supportedDropActions() const
{ {
...@@ -208,11 +271,6 @@ void UBDocumentTreeWidget::dragMoveEvent(QDragMoveEvent *event) ...@@ -208,11 +271,6 @@ void UBDocumentTreeWidget::dragMoveEvent(QDragMoveEvent *event)
void UBDocumentTreeWidget::focusInEvent(QFocusEvent *event) void UBDocumentTreeWidget::focusInEvent(QFocusEvent *event)
{ {
Q_UNUSED(event);
// Tolik
//itemSelectionChanged();
QTreeWidget::focusInEvent(event); QTreeWidget::focusInEvent(event);
} }
...@@ -275,7 +333,6 @@ void UBDocumentTreeWidget::dropEvent(QDropEvent *event) ...@@ -275,7 +333,6 @@ void UBDocumentTreeWidget::dropEvent(QDropEvent *event)
if (groupItem->isTrashFolder()) if (groupItem->isTrashFolder())
mSelectedProxyTi->setFlags(mSelectedProxyTi->flags() ^ Qt::ItemIsEditable); mSelectedProxyTi->setFlags(mSelectedProxyTi->flags() ^ Qt::ItemIsEditable);
//clearSelection();
expandItem(groupItem); expandItem(groupItem);
scrollToItem(mSelectedProxyTi); scrollToItem(mSelectedProxyTi);
...@@ -320,7 +377,6 @@ void UBDocumentTreeWidget::dropEvent(QDropEvent *event) ...@@ -320,7 +377,6 @@ void UBDocumentTreeWidget::dropEvent(QDropEvent *event)
if (scene) if (scene)
{ {
UBGraphicsScene* sceneClone = scene->sceneDeepCopy(); UBGraphicsScene* sceneClone = scene->sceneDeepCopy();
// UBGraphicsScene* sceneClone = scene;
UBDocumentProxy *targetDocProxy = targetProxyTreeItem->proxy(); UBDocumentProxy *targetDocProxy = targetProxyTreeItem->proxy();
...@@ -453,6 +509,35 @@ QString UBDocumentGroupTreeItem::groupName() const ...@@ -453,6 +509,35 @@ QString UBDocumentGroupTreeItem::groupName() const
return text(0); return text(0);
} }
QString UBDocumentGroupTreeItem::buildEntirePath()
{
QString result(groupName());
UBDocumentGroupTreeItem* item = this;
while(item->parent()){
item = dynamic_cast<UBDocumentGroupTreeItem*>(item->parent());
result = item->groupName() + "/" + result;
}
return result;
}
void UBDocumentGroupTreeItem::updateChildrenPath(int column, QString& previousText, const QString& text)
{
for(int i = 0; i < childCount(); i += 1){
UBDocumentGroupTreeItem* groupTreeItem = dynamic_cast<UBDocumentGroupTreeItem*>(child(i));
if(groupTreeItem)
groupTreeItem->updateChildrenPath(column, previousText,text);
else{
UBDocumentProxyTreeItem* docProxyItem = dynamic_cast<UBDocumentProxyTreeItem*>(child(i));
QString groupName = docProxyItem->proxy()->metaData(UBSettings::documentGroupName).toString();
groupName = groupName.remove(0,previousText.length());
groupName = text + groupName;
docProxyItem->proxy()->setMetaData(UBSettings::documentGroupName, groupName);
UBPersistenceManager::persistenceManager()->persistDocumentMetadata(docProxyItem->proxy());
}
}
}
bool UBDocumentGroupTreeItem::isTrashFolder() const bool UBDocumentGroupTreeItem::isTrashFolder() const
{ {
......
...@@ -54,8 +54,9 @@ class UBDocumentTreeWidget : public QTreeWidget ...@@ -54,8 +54,9 @@ class UBDocumentTreeWidget : public QTreeWidget
void documentUpdated(UBDocumentProxy *pDocument); void documentUpdated(UBDocumentProxy *pDocument);
void itemChangedValidation(QTreeWidgetItem * item, int column); void itemChangedValidation(QTreeWidgetItem * item, int column);
void onItemPressed(QTreeWidgetItem* item, int column);
void autoScroll(); void autoScroll();
void validationFailed();
private: private:
UBDocumentProxyTreeItem *mSelectedProxyTi; UBDocumentProxyTreeItem *mSelectedProxyTi;
...@@ -63,6 +64,10 @@ class UBDocumentTreeWidget : public QTreeWidget ...@@ -63,6 +64,10 @@ class UBDocumentTreeWidget : public QTreeWidget
QBrush mBackground; QBrush mBackground;
QTimer* mScrollTimer; QTimer* mScrollTimer;
int mScrollMagnitude; int mScrollMagnitude;
QTreeWidgetItem* mFailedValidationForTreeItem;
int mFailedValidationItemColumn;
QString mLastItemCompletePath;
QString mLastItemName;
}; };
...@@ -93,6 +98,11 @@ class UBDocumentGroupTreeItem : public QTreeWidgetItem ...@@ -93,6 +98,11 @@ class UBDocumentGroupTreeItem : public QTreeWidgetItem
bool isTrashFolder() const; bool isTrashFolder() const;
bool isDefaultFolder() const; bool isDefaultFolder() const;
QString buildEntirePath();
void updateChildrenPath(int column, QString& previousText, const QString &text);
}; };
#endif /* UBDOCUMENTTREEWIDGET_H_ */ #endif /* UBDOCUMENTTREEWIDGET_H_ */
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