preferencesAboutTextFull
Claudio Valerio 11 years ago
parent d36616339f
commit af6dc9c691
  1. 760
      resources/etc/OpenBoard.css
  2. 296
      src/document/UBDocumentController.cpp
  3. 10
      src/document/UBDocumentController.h
  4. 2
      src/document/UBDocumentProxy.cpp
  5. 141
      src/gui/UBDocumentTreeWidget.cpp
  6. 12
      src/gui/UBDocumentTreeWidget.h

@ -1,382 +1,388 @@
QWidget:enabled QWidget:enabled
{ {
color: #3F3F3F; color: #3F3F3F;
} }
QWidget:disabled QWidget:disabled
{ {
color: #777777; color: #777777;
} }
QTextEdit, QTextEdit,
QLineEdit, QLineEdit,
QComboBox#DockPaletteWidgetComboBox QAbstractItemView QComboBox#DockPaletteWidgetComboBox QAbstractItemView
{ {
selection-background-color: lightgreen; selection-background-color: lightgreen;
selection-color: black; selection-color: black;
} }
QProgressBar:horizontal { QProgressBar:horizontal {
border: 1px solid gray; border: 1px solid gray;
border-radius: 3px; border-radius: 3px;
background: white; background: white;
padding: 1px; padding: 1px;
} }
QProgressBar::chunk:horizontal { QProgressBar::chunk:horizontal {
/*background: qlineargradient(x1: 0, y1: 0.5, x2: 1, y2: 0.5, stop: 0 green, stop: 1 lightgreen);*/ /*background: qlineargradient(x1: 0, y1: 0.5, x2: 1, y2: 0.5, stop: 0 green, stop: 1 lightgreen);*/
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4); background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);
} }
QMainWindow QMainWindow
{ {
background-color: #F1F1F1; background-color: #F1F1F1;
} }
QDialog QDialog
{ {
background-color: #dddddd; background-color: #dddddd;
} }
QMenu QMenu
{ {
border: none; border: none;
font-size: 12px; font-size: 12px;
} }
QMenu::item QMenu::item
{ {
background-color: #b3b3b3; background-color: #b3b3b3;
} }
QMenu::item:selected QMenu::item:selected
{ {
background-color: #9f9f9f; background-color: #9f9f9f;
} }
QMenu::separator QMenu::separator
{ {
background-color: #b3b3b3; background-color: #b3b3b3;
border: 1px dotted #888888; border: 1px dotted #888888;
} }
QToolBar QToolBar
{ {
spacing: 0px; spacing: 0px;
background-color: #b3b3b3; background-color: #b3b3b3;
border: none; border: none;
border-bottom: 1px solid #888888; border-bottom: 1px solid #888888;
} }
QToolBar::handle QToolBar::handle
{ {
margin: 2px; margin: 2px;
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #d3d3d3, stop: 1 #c4c4c4); background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #d3d3d3, stop: 1 #c4c4c4);
} }
QToolBar::separator QToolBar::separator
{ {
border: 1px dotted #888888; border-left: none; margin-left: 5px; margin-right: 5px; width: 1px; border: 1px dotted #888888; border-left: none; margin-left: 5px; margin-right: 5px; width: 1px;
} }
QToolBar QToolButton QToolBar QToolButton
{ {
margin: 4px; margin: 4px;
margin-left: 0px; margin-left: 0px;
margin-right: 0px; margin-right: 0px;
padding: 0px; padding: 0px;
border: none; border: none;
height: 58px; height: 58px;
} }
QToolBar QToolButton:pressed QToolBar QToolButton:pressed
{ {
margin: 4px; margin: 4px;
margin-left: 0px; margin-left: 0px;
margin-right: 0px; margin-right: 0px;
padding: 0px; padding: 0px;
border: none; border: none;
height: 58px; height: 58px;
background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5, background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5,
fx:0.5, fy:0.5, stop: 0 #d3d3d3, stop: 1 #b3b3b3); fx:0.5, fy:0.5, stop: 0 #d3d3d3, stop: 1 #b3b3b3);
} }
QDialog QToolButton:pressed QDialog QToolButton:pressed
{ {
background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5, background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5,
fx:0.5, fy:0.5, stop: 0 #ffffff, stop: 1 #dddddd); fx:0.5, fy:0.5, stop: 0 #ffffff, stop: 1 #dddddd);
} }
QToolButton#ubButtonGroupLeft QToolButton#ubButtonGroupLeft
{ {
background: qlineargradient(x1: 0, y1: 0.49, x2: 0, y2: 0.5, stop: 0 #d3d3d3, stop: 1 #c4c4c4); background: qlineargradient(x1: 0, y1: 0.49, x2: 0, y2: 0.5, stop: 0 #d3d3d3, stop: 1 #c4c4c4);
margin-top: 1px; margin-top: 1px;
margin-right: 0px; margin-right: 0px;
padding: 5px; padding: 5px;
border: 1px solid #444444; border: 1px solid #444444;
border-right: none; border-right: none;
border-top-left-radius : 3px; border-top-left-radius : 3px;
border-bottom-left-radius : 3px; border-bottom-left-radius : 3px;
height: 14px; height: 14px;
} }
QToolButton#ubButtonGroupCenter QToolButton#ubButtonGroupCenter
{ {
background: qlineargradient(x1: 0, y1: 0.49, x2: 0, y2: 0.5, stop: 0 #d3d3d3, stop: 1 #c4c4c4); background: qlineargradient(x1: 0, y1: 0.49, x2: 0, y2: 0.5, stop: 0 #d3d3d3, stop: 1 #c4c4c4);
margin-top: 1px; margin-top: 1px;
margin-right: 0px; margin-right: 0px;
margin-left: 0px; margin-left: 0px;
padding: 5px; padding: 5px;
border: 1px solid #444444; border: 1px solid #444444;
border-right: none; border-right: none;
border-left: none; border-left: none;
height: 14px; height: 14px;
} }
QToolButton#ubButtonGroupRight QToolButton#ubButtonGroupRight
{ {
background: qlineargradient(x1: 0, y1: 0.49, x2: 0, y2: 0.5, stop: 0 #d3d3d3, stop: 1 #c4c4c4); background: qlineargradient(x1: 0, y1: 0.49, x2: 0, y2: 0.5, stop: 0 #d3d3d3, stop: 1 #c4c4c4);
margin-top: 1px; margin-top: 1px;
margin-left: 0px; margin-left: 0px;
padding: 5px; padding: 5px;
border: 1px solid #444444; border: 1px solid #444444;
border-left: none; border-left: none;
border-top-right-radius : 3px; border-top-right-radius : 3px;
border-bottom-right-radius : 3px; border-bottom-right-radius : 3px;
height: 14px; height: 14px;
} }
QToolButton#ubButtonGroupLeft:checked, QToolButton#ubButtonGroupLeft:checked,
QToolButton#ubButtonGroupCenter:checked, QToolButton#ubButtonGroupCenter:checked,
QToolButton#ubButtonGroupRight:checked QToolButton#ubButtonGroupRight:checked
{ {
background: qlineargradient(x1: 0, y1: 0.49, x2: 0, y2: 0.5, stop: 0 #c3c3c3, stop: 1 #b4b4b4); background: qlineargradient(x1: 0, y1: 0.49, x2: 0, y2: 0.5, stop: 0 #c3c3c3, stop: 1 #b4b4b4);
} }
QToolButton#ubButtonGroupLeft:checked QToolButton#ubButtonGroupLeft:checked
{ {
border-right: 1px solid #444444; border-right: 1px solid #444444;
padding-right: 4px; padding-right: 4px;
} }
QToolButton#ubButtonGroupCenter:checked QToolButton#ubButtonGroupCenter:checked
{ {
border-left: 1px solid #444444; border-left: 1px solid #444444;
border-right: 1px solid #444444; border-right: 1px solid #444444;
padding-right: 4px; padding-right: 4px;
padding-left: 4px; padding-left: 4px;
} }
QToolButton#ubButtonGroupRight:checked QToolButton#ubButtonGroupRight:checked
{ {
border-left: 1px solid #444444; border-left: 1px solid #444444;
padding-left: 4px; padding-left: 4px;
} }
QToolButton#ubButtonMenu QToolButton#ubButtonMenu
{ {
margin-right: 2px; margin-right: 2px;
padding-right: 12px; padding-right: 12px;
} }
QToolButton#ubButtonMenu:pressed, QToolButton#ubButtonMenu:pressed,
QToolButton#ubButtonMenu:checked QToolButton#ubButtonMenu:checked
{ {
background-color: #b3b3b3; background-color: #b3b3b3;
} }
QToolButton#ubActionPaletteButton QToolButton#ubActionPaletteButton
{ {
margin: 0px; margin: 0px;
} }
QFrame#newDocumentFolderFrame, QFrame#newDocumentFolderFrame,
QFrame#newDocumentFrame, QFrame#newDocumentFrame,
QFrame#newFolderFrame QFrame#newFolderFrame
{ {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e6eaf0, stop: 1 #dbe0e8); background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e6eaf0, stop: 1 #dbe0e8);
margin: 0px; margin: 0px;
padding: 0px; padding: 0px;
border: none; border: none;
} }
QFrame#topLeftFrame, QFrame#topLeftFrame,
QFrame#imageTopLeftFrame, QFrame#imageTopLeftFrame,
QFrame#interactiveTopLeftFrame, QFrame#interactiveTopLeftFrame,
QFrame#videoTopLeftFrame, QFrame#videoTopLeftFrame,
QFrame#toolTopLeftFrame QFrame#toolTopLeftFrame
{ {
border: none; border: none;
border-right: 1px solid #888888; border-right: 1px solid #888888;
} }
QWidget#topRightFrame QWidget#topRightFrame
{ {
background-color: #d3d3d3; background-color: #d3d3d3;
} }
QFrame#toolFrame QFrame#toolFrame
{ {
border-top: 1px solid #888888; border-top: 1px solid #888888;
} }
QTreeView QTreeView
{ {
background-color: rgb(209, 215, 226); background-color: rgb(209, 215, 226);
} }
QTreeView::item:selected:active QTreeView::item:selected:active
{ {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #AAB7C4, stop: 1 #7e8eA0); background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #AAB7C4, stop: 1 #7e8eA0);
border: none; border: none;
} }
QTreeView::item QTreeView::item
{ {
padding-top: 1.5 px; padding-top: 1.5 px;
padding-bottom: 1.5 px; padding-bottom: 1.5 px;
} }
QTreeView::item:selected, QTreeView::item:selected,
QTreeView::branch:selected QTreeView::branch:selected
{ {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #AAB7C4, stop: 1 #7e8eA0); background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #AAB7C4, stop: 1 #7e8eA0);
border: none; border: none;
} }
QTreeView::branch:has-siblings:!adjoins-item, QTreeView::branch:has-siblings:!adjoins-item,
QTreeView::branch:!has-children:!has-siblings:adjoins-item, QTreeView::branch:!has-children:!has-siblings:adjoins-item,
QTreeView::branch:has-siblings:adjoins-item QTreeView::branch:has-siblings:adjoins-item
{ {
border-image: none; border-image: none;
image: none; image: none;
} }
QTreeView::branch:has-children:!has-siblings:closed, QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings QTreeView::branch:closed:has-children:has-siblings
{ {
border-image: none; border-image: none;
image: url(:/style/treeview-branch-closed.png); image: url(:/style/treeview-branch-closed.png);
} }
QTreeView::branch:open:has-children:!has-siblings, QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings QTreeView::branch:open:has-children:has-siblings
{ {
border-image: none; border-image: none;
image: url(:/style/treeview-branch-open.png); image: url(:/style/treeview-branch-open.png);
} }
QSlider::groove:horizontal QSlider::groove:horizontal
{ {
border: 1px solid #999999; border: 1px solid #999999;
height: 2px; height: 2px;
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4); background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);
margin: 2px 0; margin: 2px 0;
} }
QSlider::handle:horizontal QSlider::handle:horizontal
{ {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #aaaaaa, stop: 1 #b8b8b8); background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #aaaaaa, stop: 1 #b8b8b8);
border: 1px solid #5c5c5c; border: 1px solid #5c5c5c;
width: 18px; width: 18px;
margin: -2px 0; margin: -2px 0;
border-radius: 6px; border-radius: 6px;
} }
QTabWidget::pane QTabWidget::pane
{ {
border: 1px solid #888888; border: 1px solid #888888;
margin-top: -2px; margin-top: -2px;
} }
QTabWidget::pane#libraryTabWidget QTabWidget::pane#libraryTabWidget
{ {
border: none; border: none;
border-top: 1px solid #888888; border-top: 1px solid #888888;
} }
QTabWidget::tab-bar QTabWidget::tab-bar
{ {
alignment: center; alignment: center;
} }
QTabWidget::tab-bar#ubWebBrowserTabWidget QTabWidget::tab-bar#ubWebBrowserTabWidget
{ {
background: #dddddd; background: #dddddd;
alignment: left; alignment: left;
} }
QTabBar::tab QTabBar::tab
{ {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #d3d3d3, stop: 1 #c4c4c4); background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #d3d3d3, stop: 1 #c4c4c4);
border: 1px solid #888888; border: 1px solid #888888;
border-bottom: none; border-bottom: none;
border-top-left-radius: 3px; border-top-left-radius: 3px;
border-top-right-radius: 3px; border-top-right-radius: 3px;
min-width: 15ex; min-width: 15ex;
margin: 2px; margin: 2px;
margin-top: 6px; margin-top: 6px;
margin-bottom: 2px; margin-bottom: 2px;
padding: 4px; padding: 4px;
height: 14px; height: 14px;
} }
QTabBar::tab:first QTabBar::tab:first
{ {
border-left: 1px solid #888888; border-left: 1px solid #888888;
} }
QTabBar::tab:last QTabBar::tab:last
{ {
border-right: 1px solid #888888; border-right: 1px solid #888888;
} }
QTabBar::tab:selected QTabBar::tab:selected
{ {
border-right: 1px solid #888888; border-right: 1px solid #888888;
border-left: 1px solid #888888; border-left: 1px solid #888888;
border-bottom: none; border-bottom: none;
} }
QTabBar::tab:first:selected QTabBar::tab:first:selected
{ {
border-right: 1px solid #888888; border-right: 1px solid #888888;
} }
QTabBar::tab:last:selected QTabBar::tab:last:selected
{ {
border-left: 1px solid #888888; border-left: 1px solid #888888;
} }
QTabBar::tab:selected QTabBar::tab:selected
{ {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #aaaaaa, stop: 1 #b8b8b8); background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #aaaaaa, stop: 1 #b8b8b8);
} }
QTabBar::tab#ubWebBrowserTabBar QTabBar::tab#ubWebBrowserTabBar
{ {
background: #dddddd; background: #dddddd;
min-width: 150px; min-width: 150px;
} }
QTabBar::tab:selected#ubWebBrowserTabBar QTabBar::tab:selected#ubWebBrowserTabBar
{ {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #b3b3b3, stop: 1 #dddddd); background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #b3b3b3, stop: 1 #dddddd);
} }
QLineEdit#ubWebBrowserLineEdit QLineEdit#ubWebBrowserLineEdit
{ {
border: 1px solid #888888; border: 1px solid #888888;
border-radius: 3px; border-radius: 3px;
padding: 2 2px; padding: 2 2px;
background: white; background: white;
} }
QSplitter
{
background-color: #b3b3b3;
width : 15px;

@ -103,7 +103,9 @@ void UBDocumentController::createNewDocument()
if (group) if (group)
{ {
UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument(group->groupName()); QString path = group->buildEntirePath();
UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument(path);
selectDocument(document); selectDocument(document);
} }
@ -201,7 +203,19 @@ void UBDocumentController::createNewDocumentGroup()
int trashIndex = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(mTrashTi); int trashIndex = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(mTrashTi);
mDocumentUI->documentTreeWidget->insertTopLevelItem(trashIndex, docGroupItem); UBDocumentGroupTreeItem* selected = selectedDocumentGroupTreeItem();
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);
} }
@ -293,8 +307,7 @@ 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, connect(mDocumentUI->documentZoomSlider, SIGNAL(valueChanged(int)), this, SLOT(documentZoomSliderValueChanged(int)));
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()));
@ -525,9 +538,9 @@ void UBDocumentController::duplicateSelectedItem()
if (source && group) if (source && group)
{ {
QString docName = source->metaData(UBSettings::documentName).toString(); QString docName = source->metaData(UBSettings::documentName).toString();
showMessage(tr("Duplicating Document %1").arg(docName), true); showMessage(tr("Duplicating Document %1").arg(docName), true);
UBDocumentProxy* duplicatedDoc = UBPersistenceManager::persistenceManager()->duplicateDocument(source); UBDocumentProxy* duplicatedDoc = UBPersistenceManager::persistenceManager()->duplicateDocument(source);
duplicatedDoc->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); duplicatedDoc->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
@ -612,6 +625,38 @@ 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;
@ -625,14 +670,9 @@ void UBDocumentController::moveFolderToTrash(UBDocumentGroupTreeItem* groupTi)
} }
} }
QList<UBDocumentProxyTreeItem*> toBeDeleted;
for (int i = 0; i < groupTi->childCount(); i++)
{ QList<UBDocumentProxyTreeItem*> toBeDeleted = getProxies(groupTi);
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++)
{ {
@ -644,21 +684,38 @@ 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());
groupTi->removeChild(proxyTi); UBDocumentGroupTreeItem* parentDirectory = dynamic_cast<UBDocumentGroupTreeItem*>(mMapOfPaths.value(oldGroupName));
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);
}
} }
} }
@ -809,96 +866,56 @@ 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();
QMap<QString, UBDocumentGroupTreeItem*> groupNamesMap; UBDocumentGroupTreeItem* emptyGroupNameTi = new UBDocumentGroupTreeItem(0, false);
emptyGroupNameTi->setGroupName(mDefaultDocumentGroupName);
UBDocumentGroupTreeItem* emptyGroupNameTi = 0; emptyGroupNameTi->setIcon(0, QIcon(":/images/toolbar/documents.png"));
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)
{ {
QString docGroup = proxy->metaData(UBSettings::documentGroupName).toString(); addDocumentInTree(proxy);
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);
if (mBoardController->selectedDocument() == proxy)
{
mDocumentUI->documentTreeWidget->expandItem(docGroupItem);
mDocumentUI->documentTreeWidget->setCurrentItem(docGroupItem);
}
} }
} }
foreach (const QString emptyGroupName, emptyGroupNames)
{
UBDocumentGroupTreeItem* docGroupItem = new UBDocumentGroupTreeItem(0); // deleted by the tree widget
groupNamesMap.insert(emptyGroupName, docGroupItem);
docGroupItem->setGroupName(emptyGroupName);
}
QList<QString> groupNamesList = groupNamesMap.keys();
qSort(groupNamesList);
foreach (const QString groupName, groupNamesList)
{
UBDocumentGroupTreeItem* ti = groupNamesMap.value(groupName);
if (ti != emptyGroupNameTi)
mDocumentUI->documentTreeWidget->addTopLevelItem(ti);
}
if (emptyGroupNameTi)
mDocumentUI->documentTreeWidget->addTopLevelItem(emptyGroupNameTi);
mDocumentUI->documentTreeWidget->addTopLevelItem(mTrashTi);
} }
@ -912,12 +929,27 @@ void UBDocumentController::itemClicked(QTreeWidgetItem * item, int column )
} }
void UBDocumentController::treeGroupItemRenamed(QString& oldPath,QString& newPath)
{
if(oldPath.isEmpty() || newPath.isEmpty())
return;
QList<QString> keys = mMapOfPaths.keys();
for(int i = 0; i < keys.count(); i += 1){
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);
}
}
}
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*)) disconnect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*)) , this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
, this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
if (proxyItem) if (proxyItem)
{ {
@ -939,7 +971,6 @@ void UBDocumentController::itemChanged(QTreeWidgetItem * item, int column)
if (childItem) if (childItem)
{ {
QString groupName;
if (0 != (item->flags() & Qt::ItemIsEditable)) if (0 != (item->flags() & Qt::ItemIsEditable))
{ {
childItem->proxy()->setMetaData(UBSettings::documentGroupName, item->text(column)); childItem->proxy()->setMetaData(UBSettings::documentGroupName, item->text(column));
@ -950,8 +981,7 @@ void UBDocumentController::itemChanged(QTreeWidgetItem * item, int column)
} }
} }
connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*)), connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*)), this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
} }
@ -1341,42 +1371,51 @@ void UBDocumentController::addToDocument()
} }
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 = 0; UBDocumentGroupTreeItem* group = NULL;
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);
mDocumentUI->documentTreeWidget->editItem(ti,0);
} }
@ -1401,11 +1440,24 @@ QStringList UBDocumentController::allGroupNames()
{ {
QStringList result; QStringList result;
for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++) UBDocumentGroupTreeItem* selectedGroup = selectedDocumentGroupTreeItem();
{ if(selectedGroup->isDefaultFolder()){
QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item); for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
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,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
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::SystemLocaleShortDate)); setMetaData(UBSettings::documentName, now.toString(Qt::ISODate));
setUuid(QUuid::createUuid()); setUuid(QUuid::createUuid());

@ -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 @@
#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 @@
#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,95 @@ 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)
// 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)
{ {
UBDocumentGroupTreeItem *group = dynamic_cast< UBDocumentGroupTreeItem *>(item); QString name = treeItem->text(column);
// if(name.isEmpty())
// UBApplication::mainWindow->warning(emptyNameWarningTitle,emptyNameWarningText);
if (group) for(int i = 0; i < treeItem->parent()->childCount(); i++)
{ {
QString name = group->text(0); QTreeWidgetItem* childAtPosition = treeItem->parent()->child(i);
if (childAtPosition != item && childAtPosition->text(column) == name){
UBApplication::mainWindow->warning(alreadyExistsNameWarningTitle,alreadyExistsNameWarningText);
// This is not really a good way but at this time we are not yet out of the editing time
// this is not what is told by the name of the function itemChanged...
mFailedValidationForTreeItem = item;
mFailedValidationItemColumn = column;
QTimer::singleShot(100,this,SLOT(validationFailed()));
return;
}
}
}
for(int i = 0; i < topLevelItemCount (); i++)
{
QTreeWidgetItem *someTopLevelItem = topLevelItem(i);
if (someTopLevelItem != group && UBDocumentGroupTreeItem* group = dynamic_cast<UBDocumentGroupTreeItem *>(item);
someTopLevelItem->text(0) == name) if(group)
{ {
group->setText(0, tr("%1 (copy)").arg(name)); QString name = group->text(column);
// if(name.isEmpty())
// UBApplication::mainWindow->warning(emptyNameWarningTitle,emptyNameWarningText);
if(group->parent()){
for(int i = 0; i < group->parent()->childCount(); i++)
{
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 +277,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 +339,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 +383,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 +515,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
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
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
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