// This will be called before each test function is executed. void tst_AddBookmarkDialog::init() { BookmarksManager *manager = BrowserApplication::bookmarksManager(); BookmarkNode *root = manager->bookmarks(); QList<BookmarkNode*> nodes = root->children(); BookmarkNode *menu = nodes[0]; BookmarkNode *toolbar = nodes[1]; while (!menu->children().isEmpty()) manager->removeBookmark(menu->children().first()); while (!toolbar->children().isEmpty()) manager->removeBookmark(toolbar->children().first()); }
QModelIndex BookmarksModel::index(BookmarkNode *node) const { BookmarkNode *parent = node->parent(); if (!parent) return QModelIndex(); return createIndex(parent->children().indexOf(node), 0, node); }
QModelIndex BookmarksModel::index(int row, int column, const QModelIndex &parent) const { if (row < 0 || column < 0 || row >= rowCount(parent) || column >= columnCount(parent)) return QModelIndex(); // get the parent node BookmarkNode *parentNode = node(parent); return createIndex(row, column, parentNode->children().at(row)); }
bool BookmarksModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { if (action == Qt::IgnoreAction) return true; if (column > 0) return false; BookmarkNode *parentNode = node(parent); if (!data->hasFormat(MIMETYPE)) { if (!data->hasUrls()) return false; BookmarkNode *node = new BookmarkNode(BookmarkNode::Bookmark, parentNode); node->url = QString::fromUtf8(data->urls().at(0).toEncoded()); if (data->hasText()) node->title = data->text(); else node->title = node->url; m_bookmarksManager->addBookmark(parentNode, node, row); return true; } QByteArray ba = data->data(MIMETYPE); QDataStream stream(&ba, QIODevice::ReadOnly); if (stream.atEnd()) return false; QUndoStack *undoStack = m_bookmarksManager->undoRedoStack(); undoStack->beginMacro(QLatin1String("Move Bookmarks")); while (!stream.atEnd()) { QByteArray encodedData; stream >> encodedData; QBuffer buffer(&encodedData); buffer.open(QBuffer::ReadOnly); XbelReader reader; BookmarkNode *rootNode = reader.read(&buffer); QList<BookmarkNode*> children = rootNode->children(); for (int i = 0; i < children.count(); ++i) { BookmarkNode *bookmarkNode = children.at(i); rootNode->remove(bookmarkNode); row = qMax(0, row); m_bookmarksManager->addBookmark(parentNode, bookmarkNode, row); m_endMacro = true; } delete rootNode; } return true; }
void BookmarksManager::removeBookmark(BookmarkNode *node) { if (!m_loaded) return; Q_ASSERT(node); BookmarkNode *parent = node->parent(); int row = parent->children().indexOf(node); RemoveBookmarksCommand *command = new RemoveBookmarksCommand(this, parent, row); m_commands.push(command); }
QModelIndex BookmarksModel::parent(const QModelIndex &index) const { if (!index.isValid()) return QModelIndex(); BookmarkNode *itemNode = node(index); BookmarkNode *parentNode = (itemNode ? itemNode->parent() : 0); if (!parentNode || parentNode == m_bookmarksManager->bookmarks()) return QModelIndex(); // get the parent's row BookmarkNode *grandParentNode = parentNode->parent(); int parentRow = grandParentNode->children().indexOf(parentNode); Q_ASSERT(parentRow >= 0); return createIndex(parentRow, 0, parentNode); }
bool BookmarksModel::removeRows(int row, int count, const QModelIndex &parent) { if (row < 0 || count <= 0 || row + count > rowCount(parent)) return false; BookmarkNode *bookmarkNode = node(parent); for (int i = row + count - 1; i >= row; --i) { BookmarkNode *node = bookmarkNode->children().at(i); if (node == m_bookmarksManager->menu() || node == m_bookmarksManager->toolbar()) continue; m_bookmarksManager->removeBookmark(node); } if (m_endMacro) { m_bookmarksManager->undoRedoStack()->endMacro(); m_endMacro = false; } return true; }
void tst_AddBookmarkDialog::addbookmarkdialog() { QFETCH(QString, url); QFETCH(QString, title); QFETCH(QDialogButtonBox::StandardButton, button); QFETCH(int, menuCount); QFETCH(int, toolbarCount); QFETCH(int, select); BookmarksManager *manager = BrowserApplication::bookmarksManager(); qRegisterMetaType<BookmarkNode *>("BookmarkNode *"); QSignalSpy spy(manager, SIGNAL(entryAdded(BookmarkNode *))); BookmarkNode *menu = manager->menu(); BookmarkNode *toolbar = manager->toolbar(); QCOMPARE(menu->children().count(), 0); QCOMPARE(toolbar->children().count(), 0); SubAddBookmarkDialog dialog(0, manager); dialog.setUrl(url); dialog.setTitle(title); QComboBox *combobox = dialog.findChild<QComboBox*>(); QVERIFY(combobox); if (select != -1) { combobox->setCurrentIndex(select); combobox->view()->setCurrentIndex(combobox->model()->index(select, 0)); } QDialogButtonBox *buttonBox = dialog.findChild<QDialogButtonBox*>(); QVERIFY(buttonBox); QPushButton *pushButton = buttonBox->button(button); pushButton->click(); QCOMPARE(spy.count(), menuCount + toolbarCount); QCOMPARE(menu->children().count(), menuCount); QCOMPARE(toolbar->children().count(), toolbarCount); BookmarkNode *node = 0; if (menuCount == 1) node = menu->children()[0]; if (toolbarCount == 1) node = toolbar->children()[0]; if (node) { QCOMPARE(node->title, title); QCOMPARE(node->url, url); } }
void tst_Xbel::readProperly() { SubXbelReader reader; BookmarkNode *root = reader.read("all.xbel"); QCOMPARE(reader.error(), QXmlStreamReader::NoError); QList<BookmarkNode *>children = root->children(); QCOMPARE(children.count(), 4); // null folder QCOMPARE(children[0]->children().count(), 0); QCOMPARE(children[0]->title, QString()); QCOMPARE(children[0]->url, QString()); QCOMPARE(children[0]->expanded, false); // folded = no QCOMPARE(children[1]->children().count(), 0); QCOMPARE(children[1]->title, QString()); QCOMPARE(children[1]->url, QString()); QCOMPARE(children[1]->expanded, true); QCOMPARE(children[1]->type(), BookmarkNode::Folder); // folder with two bookmarks QCOMPARE(children[2]->children().count(), 2); QCOMPARE(children[2]->title, QString("Folder Title")); QCOMPARE(children[2]->url, QString()); QCOMPARE(children[2]->expanded, false); QCOMPARE(children[2]->type(), BookmarkNode::Folder); { children = children[2]->children(); QCOMPARE(children[0]->children().count(), 0); QCOMPARE(children[0]->title, QString("Title")); QCOMPARE(children[0]->url, QString("http://www.foo.com/")); QCOMPARE(children[0]->expanded, false); QCOMPARE(children[0]->type(), BookmarkNode::Bookmark); QCOMPARE(children[1]->children().count(), 0); QCOMPARE(children[1]->title, QString("Title 2")); QCOMPARE(children[1]->url, QString("http://www.bar.com/")); QCOMPARE(children[1]->expanded, false); QCOMPARE(children[1]->type(), BookmarkNode::Bookmark); } children = root->children(); QCOMPARE(children[3]->children().count(), 3); QCOMPARE(children[3]->title, QString("Has SubFolder")); QCOMPARE(children[3]->url, QString()); QCOMPARE(children[3]->expanded, true); QCOMPARE(children[3]->type(), BookmarkNode::Folder); { children = children[3]->children(); QCOMPARE(children[0]->children().count(), 0); QCOMPARE(children[0]->title, QString()); QCOMPARE(children[0]->url, QString()); QCOMPARE(children[0]->expanded, false); QCOMPARE(children[0]->type(), BookmarkNode::Separator); QCOMPARE(children[1]->children().count(), 3); QCOMPARE(children[1]->title, QString("SubFolder")); QCOMPARE(children[1]->url, QString()); QCOMPARE(children[1]->expanded, true); QCOMPARE(children[1]->type(), BookmarkNode::Folder); // children not checked QCOMPARE(children[2]->children().count(), 0); QCOMPARE(children[2]->title, QString()); QCOMPARE(children[2]->url, QString()); QCOMPARE(children[2]->expanded, false); QCOMPARE(children[2]->type(), BookmarkNode::Separator); } }