removed document mode

preferencesAboutTextFull
Claudio Valerio 11 years ago
parent 422ab4c537
commit 98e4abb7b4
  1. 6
      resources/etc/OpenBoard.css
  2. 30
      resources/forms/documents.ui
  3. 288
      src/document/UBDocumentController.cpp
  4. 10
      src/document/UBDocumentController.h
  5. 2
      src/document/UBDocumentProxy.cpp
  6. 124
      src/gui/UBDocumentTreeWidget.cpp
  7. 11
      src/gui/UBDocumentTreeWidget.h

@ -380,9 +380,3 @@ QLineEdit#ubWebBrowserLineEdit
padding: 2 2px; padding: 2 2px;
background: white; background: white;
} }
QSplitter
{
background-color: #b3b3b3;
width : 15px;

@ -40,15 +40,8 @@
<property name="lineWidth"> <property name="lineWidth">
<number>0</number> <number>0</number>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout">
<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">
@ -72,17 +65,11 @@
<item> <item>
<widget class="UBDocumentTreeWidget" name="documentTreeWidget"> <widget class="UBDocumentTreeWidget" name="documentTreeWidget">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <sizepolicy hsizetype="Maximum" 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>
@ -116,6 +103,8 @@
</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"/>
@ -126,12 +115,6 @@
</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>
@ -241,7 +224,6 @@
</item> </item>
</layout> </layout>
</widget> </widget>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>
@ -261,6 +243,8 @@
<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>

@ -103,9 +103,7 @@ void UBDocumentController::createNewDocument()
if (group) if (group)
{ {
QString path = group->buildEntirePath(); UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument(group->groupName());
UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument(path);
selectDocument(document); selectDocument(document);
} }
@ -189,38 +187,21 @@ void UBDocumentController::selectDocument(UBDocumentProxy* proxy, bool setAsCurr
} }
} }
bool bullshitcode = true;
void UBDocumentController::createNewDocumentGroup() void UBDocumentController::createNewDocumentGroup()
{ {
if(bullshitcode){
mDocumentUI->documentTreeWidget->selectedItems().at(0)->setSelected(false);
mDocumentUI->documentTreeWidget->topLevelItem(0)->setSelected(true);
}
UBDocumentGroupTreeItem* docGroupItem = new UBDocumentGroupTreeItem(0); // deleted by the tree widget UBDocumentGroupTreeItem* docGroupItem = new UBDocumentGroupTreeItem(0); // deleted by the tree widget
int i = 1; int i = 1;
QString newFolderName = tr("New Folder"); QString newFolderName = tr("New Folder");
while (allGroupNames().contains(newFolderName)) while (allGroupNames().contains(newFolderName))
{
newFolderName = tr("New Folder") + " " + QVariant(i++).toString(); newFolderName = tr("New Folder") + " " + QVariant(i++).toString();
}
docGroupItem->setGroupName(newFolderName); docGroupItem->setGroupName(newFolderName);
int trashIndex = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(mTrashTi); int trashIndex = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(mTrashTi);
UBDocumentGroupTreeItem* selected = selectedDocumentGroupTreeItem(); mDocumentUI->documentTreeWidget->insertTopLevelItem(trashIndex, docGroupItem);
QString parentGroupName("");
if(selected->groupName().contains(mDefaultDocumentGroupName))
mDocumentUI->documentTreeWidget->insertTopLevelItem(trashIndex, docGroupItem);
else
selected->addChild(docGroupItem);
parentGroupName = docGroupItem->buildEntirePath();
mMapOfPaths.insert(parentGroupName,docGroupItem);
mDocumentUI->documentTreeWidget->setCurrentItem(docGroupItem); mDocumentUI->documentTreeWidget->setCurrentItem(docGroupItem);
mDocumentUI->documentTreeWidget->expandItem(docGroupItem); mDocumentUI->documentTreeWidget->expandItem(docGroupItem);
} }
@ -312,7 +293,8 @@ void UBDocumentController::setupViews()
mDocumentUI->documentZoomSlider->setValue(thumbWidth); mDocumentUI->documentZoomSlider->setValue(thumbWidth);
mDocumentUI->thumbnailWidget->setThumbnailWidth(thumbWidth); mDocumentUI->thumbnailWidget->setThumbnailWidth(thumbWidth);
connect(mDocumentUI->documentZoomSlider, SIGNAL(valueChanged(int)), this, SLOT(documentZoomSliderValueChanged(int))); connect(mDocumentUI->documentZoomSlider, SIGNAL(valueChanged(int)), this,
SLOT(documentZoomSliderValueChanged(int)));
connect(mMainWindow->actionOpen, SIGNAL(triggered()), this, SLOT(openSelectedItem())); connect(mMainWindow->actionOpen, SIGNAL(triggered()), this, SLOT(openSelectedItem()));
connect(mMainWindow->actionNewFolder, SIGNAL(triggered()), this, SLOT(createNewDocumentGroup())); connect(mMainWindow->actionNewFolder, SIGNAL(triggered()), this, SLOT(createNewDocumentGroup()));
@ -630,38 +612,6 @@ void UBDocumentController::moveDocumentToTrash(UBDocumentGroupTreeItem* groupTi,
proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable); proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
} }
QList<UBDocumentProxyTreeItem*> UBDocumentController::getProxies(QTreeWidgetItem* groupItem)
{
QList<UBDocumentProxyTreeItem*> result;
for(int i = 0; i < groupItem->childCount(); i += 1){
UBDocumentProxyTreeItem* docProxy = dynamic_cast<UBDocumentProxyTreeItem*>(groupItem->child(i));
if(docProxy)
result.append(docProxy);
else
result << getProxies(groupItem->child(i));
}
return result;
}
QList<UBDocumentGroupTreeItem*> UBDocumentController::getGroupTreeItem(QTreeWidgetItem* groupItem)
{
QList<UBDocumentGroupTreeItem*> result;
for(int i = 0; i < groupItem->childCount(); i += 1){
UBDocumentGroupTreeItem* group = dynamic_cast<UBDocumentGroupTreeItem*>(groupItem->child(i));
if(group)
result.append(group);
else
result << getGroupTreeItem(groupItem->child(i));
}
return result;
}
void UBDocumentController::moveFolderToTrash(UBDocumentGroupTreeItem* groupTi) void UBDocumentController::moveFolderToTrash(UBDocumentGroupTreeItem* groupTi)
{ {
bool changeCurrentDocument = false; bool changeCurrentDocument = false;
@ -675,9 +625,15 @@ void UBDocumentController::moveFolderToTrash(UBDocumentGroupTreeItem* groupTi)
} }
} }
QList<UBDocumentProxyTreeItem*> toBeDeleted;
QList<UBDocumentProxyTreeItem*> toBeDeleted = getProxies(groupTi); 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++) for (int i = 0; i < toBeDeleted.count(); i++)
{ {
@ -689,38 +645,21 @@ void UBDocumentController::moveFolderToTrash(UBDocumentGroupTreeItem* groupTi)
proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName); proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName);
UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy()); UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy());
UBDocumentGroupTreeItem* parentDirectory = dynamic_cast<UBDocumentGroupTreeItem*>(mMapOfPaths.value(oldGroupName)); groupTi->removeChild(proxyTi);
parentDirectory->removeChild(proxyTi);
mTrashTi->addChild(proxyTi); mTrashTi->addChild(proxyTi);
proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable); proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
showMessage(QString("%1 deleted").arg(groupTi->groupName())); showMessage(QString("%1 deleted").arg(groupTi->groupName()));
} }
QList<UBDocumentGroupTreeItem*> dirToDelete = getGroupTreeItem(groupTi);
for(int i = dirToDelete.count() - 1; i >= 0 ; i -= 1){
UBDocumentGroupTreeItem* parent = dynamic_cast<UBDocumentGroupTreeItem*>(dirToDelete.at(i)->parent());
if(parent){
mMapOfPaths.remove(dirToDelete.at(i)->buildEntirePath());
parent->removeChild(dirToDelete.at(i));
}
}
// dont remove default group // dont remove default group
if (!groupTi->isDefaultFolder()) if (!groupTi->isDefaultFolder())
{ {
int index = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(groupTi); int index = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(groupTi);
if (index >= 0) if (index >= 0)
{
mDocumentUI->documentTreeWidget->takeTopLevelItem(index); mDocumentUI->documentTreeWidget->takeTopLevelItem(index);
else {
UBDocumentGroupTreeItem* parent = dynamic_cast<UBDocumentGroupTreeItem*>(groupTi->parent());
if(parent){
mMapOfPaths.remove(groupTi->buildEntirePath());
parent->removeChild(groupTi);
}
} }
} }
@ -871,90 +810,109 @@ void UBDocumentController::documentZoomSliderValueChanged (int value)
} }
UBDocumentGroupTreeItem* UBDocumentController::getCommonGroupItem(QString &path)
{
QList<QString> paths = mMapOfPaths.keys();
if(paths.count() == 0)
return NULL;
QString commonPath = path;
do{
if(paths.contains(commonPath))
return mMapOfPaths.value(commonPath);
else{
int lastSeparatorIndex = commonPath.lastIndexOf("/");
if(lastSeparatorIndex>0)
commonPath = commonPath.left(lastSeparatorIndex);
else
commonPath = "";
}
}while(commonPath.length() > 0);
return NULL;
}
void UBDocumentController::loadDocumentProxies() void UBDocumentController::loadDocumentProxies()
{ {
QList<QPointer<UBDocumentProxy> > proxies = UBPersistenceManager::persistenceManager()->documentProxies; QList<QPointer<UBDocumentProxy> > proxies = UBPersistenceManager::persistenceManager()->documentProxies;
QStringList emptyGroupNames = UBSettings::settings()->value("Document/EmptyGroupNames", QStringList()).toStringList();
mDocumentUI->documentTreeWidget->clear(); mDocumentUI->documentTreeWidget->clear();
UBDocumentGroupTreeItem* emptyGroupNameTi = new UBDocumentGroupTreeItem(0, false); QMap<QString, UBDocumentGroupTreeItem*> groupNamesMap;
emptyGroupNameTi->setGroupName(mDefaultDocumentGroupName);
emptyGroupNameTi->setIcon(0, QIcon(":/images/toolbar/documents.png")); UBDocumentGroupTreeItem* emptyGroupNameTi = 0;
mMapOfPaths.insert(mDefaultDocumentGroupName,emptyGroupNameTi);
mTrashTi = new UBDocumentGroupTreeItem(0, false); // deleted by the tree widget mTrashTi = new UBDocumentGroupTreeItem(0, false); // deleted by the tree widget
mTrashTi->setGroupName(mDocumentTrashGroupName); mTrashTi->setGroupName(mDocumentTrashGroupName);
mTrashTi->setIcon(0, QIcon(":/images/trash.png")); mTrashTi->setIcon(0, QIcon(":/images/trash.png"));
mMapOfPaths.insert(mDocumentTrashGroupName,mTrashTi);
mDocumentUI->documentTreeWidget->addTopLevelItem(emptyGroupNameTi);
mDocumentUI->documentTreeWidget->addTopLevelItem(mTrashTi);
foreach (QPointer<UBDocumentProxy> proxy, proxies) foreach (QPointer<UBDocumentProxy> proxy, proxies)
{ {
if (proxy) if (proxy)
{ {
addDocumentInTree(proxy); QString docGroup = proxy->metaData(UBSettings::documentGroupName).toString();
bool isEmptyGroupName = false;
bool isInTrash = false;
if (docGroup.isEmpty()) // #see https://trac.assembla.com/uniboard/ticket/426
{
docGroup = mDefaultDocumentGroupName;
isEmptyGroupName = true;
} }
else if (docGroup.startsWith(UBSettings::trashedDocumentGroupNamePrefix))
{
isInTrash = true;
} }
QString docName = proxy->metaData(UBSettings::documentName).toString();
if (emptyGroupNames.contains(docGroup))
emptyGroupNames.removeAll(docGroup);
if (!groupNamesMap.contains(docGroup) && !isInTrash)
{
UBDocumentGroupTreeItem* docGroupItem = new UBDocumentGroupTreeItem(0, !isEmptyGroupName); // deleted by the tree widget
groupNamesMap.insert(docGroup, docGroupItem);
docGroupItem->setGroupName(docGroup);
if (isEmptyGroupName)
emptyGroupNameTi = docGroupItem;
} }
UBDocumentGroupTreeItem* docGroupItem;
if (isInTrash)
docGroupItem = mTrashTi;
else
docGroupItem = groupNamesMap.value(docGroup);
QTreeWidgetItem* docItem = new UBDocumentProxyTreeItem(docGroupItem, proxy, !isInTrash);
docItem->setText(0, docName);
void UBDocumentController::itemClicked(QTreeWidgetItem * item, int column ) if (mBoardController->selectedDocument() == proxy)
{ {
Q_UNUSED(item); mDocumentUI->documentTreeWidget->expandItem(docGroupItem);
Q_UNUSED(column); mDocumentUI->documentTreeWidget->setCurrentItem(docGroupItem);
}
}
}
selectDocument(selectedDocumentProxy(), false); foreach (const QString emptyGroupName, emptyGroupNames)
itemSelectionChanged(); {
UBDocumentGroupTreeItem* docGroupItem = new UBDocumentGroupTreeItem(0); // deleted by the tree widget
groupNamesMap.insert(emptyGroupName, docGroupItem);
docGroupItem->setGroupName(emptyGroupName);
} }
QList<QString> groupNamesList = groupNamesMap.keys();
qSort(groupNamesList);
void UBDocumentController::treeGroupItemRenamed(QString& oldPath,QString& newPath) foreach (const QString groupName, groupNamesList)
{ {
if(oldPath.isEmpty() || newPath.isEmpty()) UBDocumentGroupTreeItem* ti = groupNamesMap.value(groupName);
return;
QList<QString> keys = mMapOfPaths.keys(); if (ti != emptyGroupNameTi)
for(int i = 0; i < keys.count(); i += 1){ mDocumentUI->documentTreeWidget->addTopLevelItem(ti);
QString key = keys.at(i);
if(key.startsWith(oldPath)){
UBDocumentGroupTreeItem* value = mMapOfPaths.take(key);
key = key.remove(0,oldPath.size());
mMapOfPaths.insert(key.prepend(newPath),value);
} }
if (emptyGroupNameTi)
mDocumentUI->documentTreeWidget->addTopLevelItem(emptyGroupNameTi);
mDocumentUI->documentTreeWidget->addTopLevelItem(mTrashTi);
} }
void UBDocumentController::itemClicked(QTreeWidgetItem * item, int column )
{
Q_UNUSED(item);
Q_UNUSED(column);
selectDocument(selectedDocumentProxy(), false);
itemSelectionChanged();
} }
void UBDocumentController::itemChanged(QTreeWidgetItem * item, int column) void UBDocumentController::itemChanged(QTreeWidgetItem * item, int column)
{ {
UBDocumentProxyTreeItem* proxyItem = dynamic_cast<UBDocumentProxyTreeItem*>(item); UBDocumentProxyTreeItem* proxyItem = dynamic_cast<UBDocumentProxyTreeItem*>(item);
disconnect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*)) , this, SLOT(updateDocumentInTree(UBDocumentProxy*))); disconnect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*))
, this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
if (proxyItem) if (proxyItem)
{ {
@ -986,7 +944,8 @@ void UBDocumentController::itemChanged(QTreeWidgetItem * item, int column)
} }
} }
connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*)), this, SLOT(updateDocumentInTree(UBDocumentProxy*))); connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*)),
this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
} }
@ -1375,48 +1334,42 @@ void UBDocumentController::addToDocument()
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
} }
UBDocumentGroupTreeItem* UBDocumentController::getParentTreeItem(QString& documentGroup)
{
QString pathNotYetCreated = documentGroup;
UBDocumentGroupTreeItem* result = getCommonGroupItem(documentGroup);
if(result)
pathNotYetCreated = pathNotYetCreated.remove(0,result->buildEntirePath().size());
if(pathNotYetCreated.startsWith("/")) pathNotYetCreated = pathNotYetCreated.remove(0,1);
QString completePath = result ? result->groupName() + "/" : "";
QStringList folders = pathNotYetCreated.split("/");
for(int i = 0; i < folders.count(); i += 1 ){
if(!folders.at(i).isEmpty()){
completePath = completePath + folders.at(i);
UBDocumentGroupTreeItem* newTreeItem = new UBDocumentGroupTreeItem(result, true);
newTreeItem->setGroupName(folders.at(i));
if(completePath.indexOf("/") == -1)
mDocumentUI->documentTreeWidget->insertTopLevelItem(0,newTreeItem);
mMapOfPaths.insert(completePath,newTreeItem);
result = newTreeItem;
completePath += "/";
}
}
return result;
}
void UBDocumentController::addDocumentInTree(UBDocumentProxy* pDocument) void UBDocumentController::addDocumentInTree(UBDocumentProxy* pDocument)
{ {
QString documentName = pDocument->name(); QString documentName = pDocument->name();
QString documentGroup = pDocument->groupName(); QString documentGroup = pDocument->groupName();
if (documentGroup.isEmpty()) if (documentGroup.isEmpty())
{
documentGroup = mDefaultDocumentGroupName; documentGroup = mDefaultDocumentGroupName;
UBDocumentGroupTreeItem* group = NULL; }
UBDocumentGroupTreeItem* group = 0;
if (documentGroup.startsWith(UBSettings::trashedDocumentGroupNamePrefix)) if (documentGroup.startsWith(UBSettings::trashedDocumentGroupNamePrefix))
{
group = mTrashTi; group = mTrashTi;
}
else else
group = getParentTreeItem(documentGroup); {
for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
{
QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
if (groupItem->groupName() == documentGroup)
{
group = groupItem;
break;
}
}
}
if (group == 0)
{
group = new UBDocumentGroupTreeItem(0); // deleted by the tree widget
group->setGroupName(documentGroup);
mDocumentUI->documentTreeWidget->addTopLevelItem(group);
}
UBDocumentProxyTreeItem *ti = new UBDocumentProxyTreeItem(group, pDocument, !group->isTrashFolder()); UBDocumentProxyTreeItem *ti = new UBDocumentProxyTreeItem(group, pDocument, !group->isTrashFolder());
ti->setText(0, documentName); ti->setText(0, documentName);
@ -1445,24 +1398,11 @@ QStringList UBDocumentController::allGroupNames()
{ {
QStringList result; QStringList result;
UBDocumentGroupTreeItem* selectedGroup = selectedDocumentGroupTreeItem(); for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
if(selectedGroup->isDefaultFolder()){ {
QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++) UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
{ result << groupItem->groupName();
QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
result << groupItem->groupName();
}
}
else{
for (int i = 0; i < selectedGroup->childCount(); i++)
{
QTreeWidgetItem* item = selectedGroup->child(i);
UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
if(groupItem)
result << groupItem->groupName();
}
} }
return result; return result;

@ -66,8 +66,6 @@ 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();
@ -130,14 +128,6 @@ 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()
setMetaData(UBSettings::documentGroupName, ""); setMetaData(UBSettings::documentGroupName, "");
QDateTime now = QDateTime::currentDateTime(); QDateTime now = QDateTime::currentDateTime();
setMetaData(UBSettings::documentName, now.toString(Qt::ISODate)); setMetaData(UBSettings::documentName, now.toString(Qt::SystemLocaleShortDate));
setUuid(QUuid::createUuid()); setUuid(QUuid::createUuid());

@ -33,9 +33,6 @@
#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"
@ -44,23 +41,22 @@
#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*)), this, SLOT(documentUpdated(UBDocumentProxy*))); connect(UBDocumentManager::documentManager(), SIGNAL(documentUpdated(UBDocumentProxy*))
, this, SLOT(documentUpdated(UBDocumentProxy*)));
connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)) , this, SLOT(itemChangedValidation(QTreeWidgetItem *, int))); connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int))
connect(mScrollTimer, SIGNAL(timeout()) , this, SLOT(autoScroll())); , this, SLOT(itemChangedValidation(QTreeWidgetItem *, int)));
connect(this,SIGNAL(itemPressed(QTreeWidgetItem*,int)),this,SLOT(onItemPressed(QTreeWidgetItem*,int))); connect(mScrollTimer, SIGNAL(timeout())
, this, SLOT(autoScroll()));
} }
@ -69,91 +65,33 @@ UBDocumentTreeWidget::~UBDocumentTreeWidget()
// NOOP // NOOP
} }
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)
{ {
QString emptyNameWarningTitle = tr("Empty name"); if (column == 0)
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 = treeItem->text(column);
if(name.isEmpty()){
mFailedValidationForTreeItem = item;
mFailedValidationItemColumn = column;
UBApplication::mainWindow->warning(emptyNameWarningTitle,emptyNameWarningText);
QTimer::singleShot(100,this,SLOT(validationFailed()));
return;
}
}
UBDocumentGroupTreeItem* group = dynamic_cast<UBDocumentGroupTreeItem *>(item); UBDocumentGroupTreeItem* group = dynamic_cast<UBDocumentGroupTreeItem *>(item);
if(group) if(group)
{ {
QString name = group->text(column); QString name = group->text(0);
if(name.isEmpty()){
mFailedValidationForTreeItem = item;
mFailedValidationItemColumn = column;
UBApplication::mainWindow->warning(emptyNameWarningTitle,emptyNameWarningText);
QTimer::singleShot(100,this,SLOT(validationFailed()));
return;
}
if(group->parent()){ for(int i = 0; i < topLevelItemCount (); i++)
for(int i = 0; i < group->parent()->childCount(); i++)
{ {
QTreeWidgetItem* childAtPosition = group->parent()->child(i); QTreeWidgetItem *someTopLevelItem = topLevelItem(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;
}
if (someTopLevelItem != group &&
someTopLevelItem->text(0) == name)
{
group->setText(0, tr("%1 (copy)").arg(name));
}
} }
} }
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
{ {
return Qt::MoveAction | Qt::CopyAction; return Qt::MoveAction | Qt::CopyAction;
@ -509,36 +447,6 @@ 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
{ {
return (0 == (flags() & Qt::ItemIsEditable)) && UBApplication::app()->documentController && (groupName() == UBApplication::app()->documentController->documentTrashGroupName()); return (0 == (flags() & Qt::ItemIsEditable)) && UBApplication::app()->documentController && (groupName() == UBApplication::app()->documentController->documentTrashGroupName());

@ -54,9 +54,7 @@ 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;
@ -64,10 +62,6 @@ class UBDocumentTreeWidget : public QTreeWidget
QBrush mBackground; QBrush mBackground;
QTimer* mScrollTimer; QTimer* mScrollTimer;
int mScrollMagnitude; int mScrollMagnitude;
QTreeWidgetItem* mFailedValidationForTreeItem;
int mFailedValidationItemColumn;
QString mLastItemCompletePath;
QString mLastItemName;
}; };
@ -98,11 +92,6 @@ 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_ */

Loading…
Cancel
Save