void testDestroyFolderImpl(const vmime::string* const dirs, const vmime::string* const files) { createMaildir(dirs, files); vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); // Destroy "Folder/SubFolder" (total: 3 folders) vmime::ref <vmime::net::folder> folder = store->getFolder (fpath() / "Folder" / "SubFolder"); folder->destroy(); // Ensure folder and its subfolders have been deleted and other folders still exist const std::vector <vmime::ref <vmime::net::folder> > allFolders = rootFolder->getFolders(true); VASSERT_EQ("1", 2, allFolders.size()); VASSERT("2", findFolder(allFolders, fpath() / "Folder") != NULL); VASSERT("3", findFolder(allFolders, fpath() / "Folder" / "SubFolder") == NULL); VASSERT("4", findFolder(allFolders, fpath() / "Folder" / "SubFolder" / "SubSubFolder1") == NULL); VASSERT("5", findFolder(allFolders, fpath() / "Folder" / "SubFolder" / "SubSubFolder2") == NULL); VASSERT("6", findFolder(allFolders, fpath() / "Folder2") != NULL); destroyMaildir(); }
void testRenameFolderImpl(const vmime::string* const dirs, const vmime::string* const files) { createMaildir(dirs, files); vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); // Rename "Folder/SubFolder" to "Folder/foo" vmime::ref <vmime::net::folder> folder = store->getFolder (fpath() / "Folder" / "SubFolder"); folder->rename(fpath() / "Folder" / "foo"); // Ensure folder and its subfolders have been renamed const std::vector <vmime::ref <vmime::net::folder> > allFolders = rootFolder->getFolders(true); VASSERT_EQ("1", 5, allFolders.size()); VASSERT("2", findFolder(allFolders, fpath() / "Folder") != NULL); VASSERT("3", findFolder(allFolders, fpath() / "Folder" / "SubFolder") == NULL); VASSERT("4", findFolder(allFolders, fpath() / "Folder" / "SubFolder" / "SubSubFolder1") == NULL); VASSERT("5", findFolder(allFolders, fpath() / "Folder" / "SubFolder" / "SubSubFolder2") == NULL); VASSERT("6", findFolder(allFolders, fpath() / "Folder2") != NULL); VASSERT("7", findFolder(allFolders, fpath() / "Folder" / "foo") != NULL); VASSERT("8", findFolder(allFolders, fpath() / "Folder" / "foo" / "SubSubFolder1") != NULL); VASSERT("9", findFolder(allFolders, fpath() / "Folder" / "foo" / "SubSubFolder2") != NULL); destroyMaildir(); }
void BookmarksContentsWidget::addSeparator() { const QModelIndex index(m_ui->bookmarksViewWidget->currentIndex()); BookmarksItem *folder(findFolder(index)); BookmarksManager::addBookmark(BookmarksModel::SeparatorBookmark, QUrl(), QString(), folder, ((folder && folder->index() == index) ? -1 : (index.row() + 1))); }
void BookmarksContentsWidget::addBookmark() { const QModelIndex index(m_ui->bookmarksViewWidget->currentIndex()); BookmarksItem *folder(findFolder(index)); BookmarkPropertiesDialog dialog(QUrl(), QString(), QString(), folder, ((folder && folder->index() == index) ? -1 : (index.row() + 1)), true, this); dialog.exec(); }
void EffectsListWidget::resetFavorites() { QTreeWidgetItem *misc = findFolder(QStringLiteral("TemporaryFolder")); if (misc) { setRootIndex(indexFromItem(invisibleRootItem())); delete misc; } }
void BookmarksContentsWidget::addSeparator() { BookmarkInformation *bookmark = new BookmarkInformation(); bookmark->type = SeparatorBookmark; bookmark->parent = findFolder(m_ui->bookmarksView->currentIndex()); BookmarksManager::addBookmark(bookmark, bookmark->parent); }
bool BtTreeModel::renameFolder(BtFolder* victim, QString newName) { QModelIndex ndx = findFolder(victim->fullPath(), 0, false); QModelIndex pInd; QString targetPath = newName % "/" % victim->name(); QPair<QString,BtTreeItem*> f; QList<QPair<QString, BtTreeItem*> > folders; // This space is important ^ int i, kids,src; if ( ! ndx.isValid() ) return false; pInd = parent(ndx); if ( ! pInd.isValid() ) return false; BtTreeItem* start = item(ndx); f.first = targetPath; f.second = start; folders.append(f); while ( ! folders.isEmpty() ) { // This looks weird, but it is needed for later f = folders.takeFirst(); targetPath = f.first; BtTreeItem* target = f.second; // As we move things, childCount changes. This makes sure we loop // through all of the kids kids = target->childCount(); src = 0; // Ok. We have a start and an index. for (i=0; i < kids; ++i) { // This looks weird and it is. As we move children out, the 0 items // changes to the next child. In the case of a folder, though, we // don't move it, so we need to get the item beyond that. BtTreeItem* next = target->child(src); // If a folder, push it onto the folders stack for latter processing if ( next->type() == BtTreeItem::FOLDER ) { QPair<QString,BtTreeItem*> newTarget; newTarget.first = targetPath % "/" % next->name(); newTarget.second = next; folders.append(newTarget); src++; } else // Leafnode next->thing()->setFolder(targetPath); } } // Last thing is to remove the victim. i = start->childNumber(); return removeRows(i, 1, pInd); }
// The actual magic shouldn't be hard. Once we trap the signal, find the // recipe, remove it from the parent and add it to the target folder. // It is not easy. Indexes are ephemeral things. We MUST calculate the insert // index after we have removed the recipe. BAD THINGS happen otherwise. // void BtTreeModel::folderChanged(QString name) { BeerXMLElement* test = qobject_cast<BeerXMLElement*>(sender()); QModelIndex ndx, pIndex; bool expand = true; if ( ! test ) return; // Find it. ndx = findElement(test); if ( ! ndx.isValid() ) { Brewtarget::logW("folderChanged:: could not find element"); return; } pIndex = parent(ndx); // Get the parent // If the parent isn't valid, its the root if ( ! pIndex.isValid() ) pIndex = createIndex(0,0,rootItem->child(0)); int i = item(ndx)->childNumber(); // Remove it if ( ! removeRows(i, 1, pIndex) ) { Brewtarget::logW("folderChanged:: could not remove row"); return; } // Find the new parent // That's awkward, but dropping a folder prolly does need a the folder // created. QModelIndex newNdx = findFolder(test->folder(), rootItem->child(0), true); if ( ! newNdx.isValid() ) { newNdx = createIndex(0,0,rootItem->child(0)); expand = false; } BtTreeItem* local = item(newNdx); int j = local->childCount(); if ( ! insertRow(j,newNdx,test,_type) ) { Brewtarget::logW("folderChanged:: could not insert row"); return; } // If we have brewnotes, set them up here. if ( treeMask & RECIPEMASK ) addBrewNoteSubTree(qobject_cast<Recipe*>(test),j,local); if ( expand ) emit expandFolder(treeMask,newNdx); return; }
void testListRootFoldersImpl(const vmime::string* const dirs, const vmime::string* const files) { createMaildir(dirs, files); // Connect to store vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); // Get root folders, not recursive const std::vector <vmime::ref <vmime::net::folder> > rootFolders = rootFolder->getFolders(false); VASSERT_EQ("1", 2, rootFolders.size()); VASSERT("2", findFolder(rootFolders, fpath() / "Folder") != NULL); VASSERT("3", findFolder(rootFolders, fpath() / "Folder2") != NULL); destroyMaildir(); }
void ObjectOverviewModel::build() { cleanUp(); auto ioManager = model_.ioManager(); ioManager->createProjectStructure(); std::string wdir = ioManager->getWorkingDirectory(); auto assets = ioManager->findFolder(wdir, "assets"); if(assets.empty()) { std::cout << "assets not found? this wasn't supposed to happen" << std::endl; } else buildAssets(ioManager, assets); auto data = ioManager->findFolder(wdir, "data"); if(data.empty()) { std::cout << "data not found? this wasn't supposed to happen" << std::endl; } else buildData(ioManager, data); }
void NotesContentsWidget::addFolder() { const QString title(QInputDialog::getText(this, tr("Select Folder Name"), tr("Enter folder name:"))); if (!title.isEmpty()) { NotesManager::addNote(BookmarksModel::FolderBookmark, QUrl(), title, findFolder(m_ui->notesViewWidget->currentIndex())); } }
void BookmarksContentsWidget::addFolder() { BookmarkInformation *bookmark = new BookmarkInformation(); bookmark->type = FolderBookmark; BookmarkPropertiesDialog dialog(bookmark, findFolder(m_ui->bookmarksView->currentIndex()), this); if (dialog.exec() == QDialog::Rejected) { delete bookmark; } }
void testListAllFoldersImpl(const vmime::string* const dirs, const vmime::string* const files) { createMaildir(dirs, files); // Connect to store vmime::ref <vmime::net::store> store = createAndConnectStore(); vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder(); // Get all folders, recursive const std::vector <vmime::ref <vmime::net::folder> > allFolders = rootFolder->getFolders(true); VASSERT_EQ("1", 5, allFolders.size()); VASSERT("2", findFolder(allFolders, fpath() / "Folder") != NULL); VASSERT("3", findFolder(allFolders, fpath() / "Folder" / "SubFolder") != NULL); VASSERT("4", findFolder(allFolders, fpath() / "Folder" / "SubFolder" / "SubSubFolder1") != NULL); VASSERT("5", findFolder(allFolders, fpath() / "Folder" / "SubFolder" / "SubSubFolder2") != NULL); VASSERT("6", findFolder(allFolders, fpath() / "Folder2") != NULL); destroyMaildir(); }
bool BtTreeModel::renameFolder(BtFolder* victim, QString newName) { QModelIndex ndx = findFolder(victim->fullPath(), 0, false); QModelIndex pInd; QString targetPath = newName % "/" % victim->name(); QPair<QString,BtTreeItem*> f; QList<QPair<QString, BtTreeItem*> > folders; // This space is important ^ int i; if ( ! ndx.isValid() ) return false; pInd = parent(ndx); if ( ! pInd.isValid() ) return false; BtTreeItem* start = item(ndx); f.first = targetPath; f.second = start; folders.append(f); while ( ! folders.isEmpty() ) { // This looks weird, but it is needed for later f = folders.takeFirst(); targetPath = f.first; BtTreeItem* target = f.second; // Ok. We have a start and an index. for (i=0; i < target->childCount(); ++i) { BtTreeItem* next = target->child(i); // If a folder, push it onto the folders stack for latter processing if ( next->type() == BtTreeItem::FOLDER ) { QPair<QString,BtTreeItem*> newTarget; newTarget.first = targetPath % "/" % next->name(); newTarget.second = next; folders.append(newTarget); } else // Leafnode next->thing()->setFolder(targetPath); } } // Last thing is to remove the victim. i = start->childNumber(); return removeRows(i, 1, pInd); }
void BookmarksContentsWidget::addBookmark(BookmarkInformation *bookmark, QStandardItem *parent) { if (!bookmark) { return; } if (!parent) { parent = findFolder(bookmark->parent); } if (!parent) { return; } QStandardItem *item = NULL; switch (bookmark->type) { case FolderBookmark: item = new QStandardItem(Utils::getIcon(QLatin1String("inode-directory")), (bookmark->title.isEmpty() ? tr("(Untitled)") : bookmark->title)); for (int i = 0; i < bookmark->children.count(); ++i) { addBookmark(bookmark->children.at(i), item); } break; case UrlBookmark: item = new QStandardItem(WebBackendsManager::getBackend()->getIconForUrl(QUrl(bookmark->url)), (bookmark->title.isEmpty() ? tr("(Untitled)") : bookmark->title)); break; default: item = new QStandardItem(); item->setData(QLatin1String("separator"), Qt::AccessibleDescriptionRole); break; } item->setData(qVariantFromValue((void*) bookmark), Qt::UserRole); parent->appendRow(item); }
void EffectsListWidget::setRootOnCustomFolder() { // special case, display only items in "custom" folder" QTreeWidgetItem *item = findFolder(i18nc("Folder Name", "Custom")); if (!item) { // No custom effect, show empty list for (int i = 0; i < topLevelItemCount(); ++i) { QTreeWidgetItem *folder = topLevelItem(i); folder->setHidden(true); } return; } setRootIndex(indexFromItem(item)); for (int j = 0; j < item->childCount(); ++j) { QTreeWidgetItem *child = item->child(j); child->setHidden(false); } }
void BookmarksContentsWidget::updateFolder(int folder) { QStandardItem *item = findFolder(folder); if (!item) { return; } item->removeRows(0, item->rowCount()); const QList<BookmarkInformation*> bookmarks = BookmarksManager::getFolder(folder); for (int i = 0; i < bookmarks.count(); ++i) { addBookmark(bookmarks.at(i), item); } }
void BtTreeModel::loadTreeModel() { int i; QModelIndex ndxLocal; BtTreeItem* local = 0; QList<BeerXMLElement*> elems = elements(); foreach( BeerXMLElement* elem, elems ) { if (! elem->folder().isEmpty() ) { ndxLocal = findFolder( elem->folder(), rootItem->child(0), true ); // I cannot imagine this failing, but what the hell if ( ! ndxLocal.isValid() ) { Brewtarget::logW("Invalid return from findFolder in loadTreeModel()"); continue; } local = item(ndxLocal); i = local->childCount(); } else { local = rootItem->child(0); i = local->childCount(); ndxLocal = createIndex(i,0,local); } if ( ! insertRow(i,ndxLocal,elem,_type) ) { Brewtarget::logW("Insert failed in loadTreeModel()"); continue; } // If we have brewnotes, set them up here. if ( treeMask & RECIPEMASK ) addBrewNoteSubTree(qobject_cast<Recipe*>(elem),i,local); observeElement(elem); } }
void EffectsListWidget::createTopLevelItems(QList <QTreeWidgetItem *>list, int effectType) { // Favorites is a pseudo-folder used to store items, not visible to end user, so don't i18n its name QTreeWidgetItem *misc = findFolder(QStringLiteral("TemporaryFolder")); if (misc == NULL) { misc = new QTreeWidgetItem(this, QStringList(QStringLiteral("TemporaryFolder"))); misc->setData(0, TypeRole, QString::number((int) EffectsList::EFFECT_FOLDER)); misc->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); } else qDeleteAll(misc->takeChildren()); setIndentation(0); misc->addChildren(list); for (int j = 0; j < misc->childCount(); ++j) { QTreeWidgetItem *child = misc->child(j); child->setHidden(false); child->setData(0, Qt::UserRole, effectType); } setRootIndex(indexFromItem(misc)); }
QStandardItem *BookmarksContentsWidget::findFolder(int folder, QStandardItem *item) { if (folder == 0) { return m_model->invisibleRootItem(); } if (!item) { item = m_model->invisibleRootItem(); } for (int i = 0; i < item->rowCount(); ++i) { QStandardItem *child = item->child(i, 0); if (!child) { continue; } BookmarkInformation *bookmark = static_cast<BookmarkInformation*>(child->data(Qt::UserRole).value<void*>()); if (bookmark && bookmark->type == FolderBookmark && bookmark->identifier == folder) { return child; } QStandardItem *result = findFolder(folder, child); if (result) { return result; } } return NULL; }
bool BtTreeModel::addFolder(QString name) { return findFolder(name, rootItem->child(0), true).isValid(); }
void EffectsListWidget::initList(QMenu *effectsMenu, KActionCategory *effectActions, QString categoryFile, bool transitionMode) { QString current; QString currentFolder; bool found = false; effectsMenu->clear(); if (currentItem()) { current = currentItem()->text(0); if (currentItem()->parent()) currentFolder = currentItem()->parent()->text(0); else if (currentItem()->data(0, TypeRole) == EffectsList::EFFECT_FOLDER) currentFolder = currentItem()->text(0); } QTreeWidgetItem *misc = NULL; QTreeWidgetItem *audio = NULL; QTreeWidgetItem *custom = NULL; QList <QTreeWidgetItem *> folders; if (!categoryFile.isEmpty()) { QDomDocument doc; QFile file(categoryFile); doc.setContent(&file, false); file.close(); QStringList folderNames; QDomNodeList groups = doc.documentElement().elementsByTagName(QStringLiteral("group")); for (int i = 0; i < groups.count(); ++i) { folderNames << i18n(groups.at(i).firstChild().firstChild().nodeValue().toUtf8().constData()); } for (int i = 0; i < topLevelItemCount(); ++i) { topLevelItem(i)->takeChildren(); QString currentName = topLevelItem(i)->text(0); if (currentName != i18n("Misc") && currentName != i18n("Audio") && currentName != i18nc("Folder Name", "Custom") && !folderNames.contains(currentName)) { takeTopLevelItem(i); --i; } } for (int i = 0; i < groups.count(); ++i) { QTreeWidgetItem *item = findFolder(folderNames.at(i)); if (item) { item->setData(0, IdRole, groups.at(i).toElement().attribute(QStringLiteral("list"))); } else { item = new QTreeWidgetItem((QTreeWidget*)0, QStringList(folderNames.at(i))); item->setData(0, TypeRole, QString::number((int) EffectsList::EFFECT_FOLDER)); item->setData(0, IdRole, groups.at(i).toElement().attribute(QStringLiteral("list"))); item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); item->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless); insertTopLevelItem(0, item); } folders.append(item); } misc = findFolder(i18n("Misc")); if (misc == NULL) { misc = new QTreeWidgetItem((QTreeWidget*)0, QStringList(i18n("Misc"))); misc->setData(0, TypeRole, QString::number((int) EffectsList::EFFECT_FOLDER)); misc->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); insertTopLevelItem(0, misc); } audio = findFolder(i18n("Audio")); if (audio == NULL) { audio = new QTreeWidgetItem((QTreeWidget*)0, QStringList(i18n("Audio"))); audio->setData(0, TypeRole, QString::number((int) EffectsList::EFFECT_FOLDER)); audio->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); insertTopLevelItem(0, audio); } custom = findFolder(i18nc("Folder Name", "Custom")); if (custom == NULL) { custom = new QTreeWidgetItem((QTreeWidget*)0, QStringList(i18nc("Folder Name", "Custom"))); custom->setData(0, TypeRole, QString::number((int) EffectsList::EFFECT_FOLDER)); custom->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); insertTopLevelItem(0, custom); } } //insertTopLevelItems(0, folders); if (transitionMode) { loadEffects(&MainWindow::transitions, misc, &folders, EffectsList::TRANSITION_TYPE, current, &found); } else { loadEffects(&MainWindow::videoEffects, misc, &folders, EffectsList::EFFECT_VIDEO, current, &found); loadEffects(&MainWindow::audioEffects, audio, &folders, EffectsList::EFFECT_AUDIO, current, &found); loadEffects(&MainWindow::customEffects, custom, static_cast<QList<QTreeWidgetItem *> *>(0), EffectsList::EFFECT_CUSTOM, current, &found); if (!found && !currentFolder.isEmpty()) { // previously selected effect was removed, focus on its parent folder for (int i = 0; i < topLevelItemCount(); ++i) { if (topLevelItem(i)->text(0) == currentFolder) { setCurrentItem(topLevelItem(i)); break; } } } } setSortingEnabled(true); sortByColumn(0, Qt::AscendingOrder); // populate effects menu QMenu *sub1 = NULL; QMenu *sub2 = NULL; QMenu *sub3 = NULL; QMenu *sub4 = NULL; for (int i = 0; i < topLevelItemCount(); ++i) { if (topLevelItem(i)->data(0, TypeRole) == EffectsList::TRANSITION_TYPE) { QTreeWidgetItem *item = topLevelItem(i); QAction *a = new QAction(item->icon(0), item->text(0), effectsMenu); QStringList data = item->data(0, IdRole).toStringList(); QString id = data.at(1); if (id.isEmpty()) id = data.at(0); a->setData(data); a->setIconVisibleInMenu(false); effectsMenu->addAction(a); effectActions->addAction("transition_" + id, a); continue; } if (!topLevelItem(i)->childCount()) continue; QMenu *sub = new QMenu(topLevelItem(i)->text(0), effectsMenu); effectsMenu->addMenu(sub); int effectsInCategory = topLevelItem(i)->childCount(); bool hasSubCategories = false; if (effectsInCategory > 60) { // create subcategories if there are too many effects hasSubCategories = true; sub1 = new QMenu(i18nc("menu name for effects names between these 2 letters", "0 - F"), sub); sub->addMenu(sub1); sub2 = new QMenu(i18nc("menu name for effects names between these 2 letters", "G - L"), sub); sub->addMenu(sub2); sub3 = new QMenu(i18nc("menu name for effects names between these 2 letters", "M - R"), sub); sub->addMenu(sub3); sub4 = new QMenu(i18nc("menu name for effects names between these 2 letters", "S - Z"), sub); sub->addMenu(sub4); } for (int j = 0; j < effectsInCategory; ++j) { QTreeWidgetItem *item = topLevelItem(i)->child(j); QAction *a = new QAction(item->icon(0), item->text(0), sub); QStringList data = item->data(0, IdRole).toStringList(); QString id = data.at(1); if (id.isEmpty()) id = data.at(0); a->setData(data); a->setIconVisibleInMenu(false); if (hasSubCategories) { // put action in sub category QRegExp rx("^[s-z].+"); if (rx.exactMatch(item->text(0).toLower())) { sub4->addAction(a); } else { rx.setPattern(QStringLiteral("^[m-r].+")); if (rx.exactMatch(item->text(0).toLower())) { sub3->addAction(a); } else { rx.setPattern(QStringLiteral("^[g-l].+")); if (rx.exactMatch(item->text(0).toLower())) { sub2->addAction(a); } else sub1->addAction(a); } } } else sub->addAction(a); effectActions->addAction("video_effect_" + id, a); } } }
CWizCategoryViewFolderItem* CWizFolderView::addFolder(const QString& strLocation, bool sort) { return findFolder(strLocation, true, sort); }
void BookmarksContentsWidget::addSeparator() { BookmarksManager::addBookmark(BookmarksModel::SeparatorBookmark, QUrl(), QString(), findFolder(m_ui->bookmarksViewWidget->currentIndex())); }
void BookmarksContentsWidget::addBookmark() { BookmarksItem *bookmark = BookmarksManager::addBookmark(BookmarksModel::UrlBookmark, QUrl(), QString(), findFolder(m_ui->bookmarksViewWidget->currentIndex())); BookmarkPropertiesDialog dialog(bookmark, BookmarkPropertiesDialog::AddBookmarkMode, this); if (dialog.exec() == QDialog::Rejected) { bookmark->remove(); } }
void NotesContentsWidget::addNote() { NotesManager::addNote(BookmarksModel::UrlBookmark, QUrl(), QString(), findFolder(m_ui->notesViewWidget->currentIndex())); }