2009-02-25 09:15:00 +01:00
|
|
|
/**************************************************************************
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
|
|
|
|
** This file is part of Qt Creator
|
|
|
|
|
**
|
2010-03-05 11:25:49 +01:00
|
|
|
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
2009-06-17 00:01:27 +10:00
|
|
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** Commercial Usage
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** Licensees holding valid Qt Commercial licenses may use this file in
|
|
|
|
|
** accordance with the Qt Commercial License Agreement provided with the
|
|
|
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
|
|
|
** a written agreement between you and Nokia.
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** GNU Lesser General Public License Usage
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
|
|
|
|
** General Public License version 2.1 as published by the Free Software
|
|
|
|
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
|
|
|
|
** packaging of this file. Please review the following information to
|
|
|
|
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
|
|
|
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
2008-12-02 14:17:16 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
** If you are unsure which license is appropriate for your use, please
|
2009-08-14 09:30:56 +02:00
|
|
|
** contact the sales department at http://qt.nokia.com/contact.
|
2008-12-02 12:01:29 +01:00
|
|
|
**
|
2009-02-25 09:15:00 +01:00
|
|
|
**************************************************************************/
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
#include "bookmarkmanager.h"
|
2010-03-23 17:29:43 +01:00
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
#include "centralwidget.h"
|
2010-03-23 17:29:43 +01:00
|
|
|
#include "helpmanager.h"
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
#include <QtGui/QMenu>
|
|
|
|
|
#include <QtGui/QIcon>
|
|
|
|
|
#include <QtGui/QStyle>
|
|
|
|
|
#include <QtGui/QLabel>
|
|
|
|
|
#include <QtGui/QLayout>
|
|
|
|
|
#include <QtCore/QEvent>
|
|
|
|
|
#include <QtGui/QComboBox>
|
|
|
|
|
#include <QtGui/QKeyEvent>
|
|
|
|
|
#include <QtGui/QLineEdit>
|
|
|
|
|
#include <QtGui/QMessageBox>
|
|
|
|
|
#include <QtGui/QHeaderView>
|
|
|
|
|
#include <QtGui/QToolButton>
|
|
|
|
|
#include <QtGui/QPushButton>
|
|
|
|
|
#include <QtGui/QApplication>
|
|
|
|
|
#include <QtHelp/QHelpEngineCore>
|
|
|
|
|
#include <QtGui/QDialogButtonBox>
|
|
|
|
|
#include <QtGui/QSortFilterProxyModel>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BookmarkDialog::BookmarkDialog(BookmarkManager *manager, const QString &title,
|
2009-06-24 13:38:19 +02:00
|
|
|
const QString &url, QWidget *parent)
|
2008-12-02 12:01:29 +01:00
|
|
|
: QDialog(parent)
|
|
|
|
|
, m_url(url)
|
|
|
|
|
, m_title(title)
|
|
|
|
|
, bookmarkManager(manager)
|
|
|
|
|
{
|
|
|
|
|
installEventFilter(this);
|
|
|
|
|
|
|
|
|
|
ui.setupUi(this);
|
|
|
|
|
ui.bookmarkEdit->setText(title);
|
|
|
|
|
ui.newFolderButton->setVisible(false);
|
|
|
|
|
ui.buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
|
|
|
|
|
ui.bookmarkFolders->addItems(bookmarkManager->bookmarkFolders());
|
|
|
|
|
|
|
|
|
|
proxyModel = new QSortFilterProxyModel(this);
|
|
|
|
|
proxyModel->setFilterKeyColumn(0);
|
|
|
|
|
proxyModel->setDynamicSortFilter(true);
|
|
|
|
|
proxyModel->setFilterRole(Qt::UserRole + 10);
|
|
|
|
|
proxyModel->setSourceModel(bookmarkManager->treeBookmarkModel());
|
|
|
|
|
proxyModel->setFilterRegExp(QRegExp(QLatin1String("Folder"),
|
|
|
|
|
Qt::CaseSensitive, QRegExp::FixedString));
|
|
|
|
|
ui.treeView->setModel(proxyModel);
|
|
|
|
|
|
|
|
|
|
ui.treeView->expandAll();
|
|
|
|
|
ui.treeView->setVisible(false);
|
|
|
|
|
ui.treeView->header()->setVisible(false);
|
|
|
|
|
ui.treeView->setContextMenuPolicy(Qt::CustomContextMenu);
|
|
|
|
|
|
|
|
|
|
connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
|
|
|
|
|
connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(addAccepted()));
|
|
|
|
|
connect(ui.newFolderButton, SIGNAL(clicked()), this, SLOT(addNewFolder()));
|
|
|
|
|
connect(ui.toolButton, SIGNAL(clicked()), this, SLOT(toolButtonClicked()));
|
2009-06-24 13:38:19 +02:00
|
|
|
connect(ui.bookmarkEdit, SIGNAL(textChanged(QString)), this,
|
|
|
|
|
SLOT(textChanged(QString)));
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
connect(bookmarkManager->treeBookmarkModel(),
|
|
|
|
|
SIGNAL(itemChanged(QStandardItem*)),
|
2008-12-02 12:01:29 +01:00
|
|
|
this, SLOT(itemChanged(QStandardItem*)));
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
connect(ui.bookmarkFolders, SIGNAL(currentIndexChanged(QString)), this,
|
|
|
|
|
SLOT(selectBookmarkFolder(QString)));
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
connect(ui.treeView, SIGNAL(customContextMenuRequested(QPoint)), this,
|
|
|
|
|
SLOT(customContextMenuRequested(QPoint)));
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
connect(ui.treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex,
|
|
|
|
|
QModelIndex)), this, SLOT(currentChanged(QModelIndex)));
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BookmarkDialog::~BookmarkDialog()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkDialog::addAccepted()
|
|
|
|
|
{
|
2009-06-24 13:38:19 +02:00
|
|
|
QItemSelectionModel *model = ui.treeView->selectionModel();
|
|
|
|
|
const QModelIndexList &list = model->selection().indexes();
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
QModelIndex index;
|
|
|
|
|
if (!list.isEmpty())
|
|
|
|
|
index = proxyModel->mapToSource(list.at(0));
|
|
|
|
|
|
|
|
|
|
bookmarkManager->addNewBookmark(index, ui.bookmarkEdit->text(), m_url);
|
|
|
|
|
accept();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkDialog::addNewFolder()
|
|
|
|
|
{
|
2009-06-24 13:38:19 +02:00
|
|
|
QItemSelectionModel *model = ui.treeView->selectionModel();
|
|
|
|
|
const QModelIndexList &list = model->selection().indexes();
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
QModelIndex index;
|
|
|
|
|
if (!list.isEmpty())
|
|
|
|
|
index = list.at(0);
|
|
|
|
|
|
|
|
|
|
QModelIndex newFolder =
|
|
|
|
|
bookmarkManager->addNewFolder(proxyModel->mapToSource(index));
|
|
|
|
|
if (newFolder.isValid()) {
|
|
|
|
|
ui.treeView->expand(index);
|
|
|
|
|
const QModelIndex &index = proxyModel->mapFromSource(newFolder);
|
2009-06-24 13:38:19 +02:00
|
|
|
model->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
ui.bookmarkFolders->clear();
|
|
|
|
|
ui.bookmarkFolders->addItems(bookmarkManager->bookmarkFolders());
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
const QString &name = index.data().toString();
|
2008-12-02 12:01:29 +01:00
|
|
|
ui.bookmarkFolders->setCurrentIndex(ui.bookmarkFolders->findText(name));
|
|
|
|
|
}
|
|
|
|
|
ui.treeView->setFocus();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkDialog::toolButtonClicked()
|
|
|
|
|
{
|
|
|
|
|
bool visible = !ui.treeView->isVisible();
|
|
|
|
|
ui.treeView->setVisible(visible);
|
|
|
|
|
ui.newFolderButton->setVisible(visible);
|
|
|
|
|
|
|
|
|
|
if (visible) {
|
|
|
|
|
resize(QSize(width(), 400));
|
|
|
|
|
ui.toolButton->setText(QLatin1String("-"));
|
|
|
|
|
} else {
|
|
|
|
|
resize(width(), minimumHeight());
|
|
|
|
|
ui.toolButton->setText(QLatin1String("+"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkDialog::itemChanged(QStandardItem *item)
|
|
|
|
|
{
|
|
|
|
|
if (renameItem != item) {
|
|
|
|
|
renameItem = item;
|
|
|
|
|
oldText = item->text();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (item->text() != oldText) {
|
|
|
|
|
ui.bookmarkFolders->clear();
|
|
|
|
|
ui.bookmarkFolders->addItems(bookmarkManager->bookmarkFolders());
|
|
|
|
|
|
|
|
|
|
QString name = tr("Bookmarks");
|
|
|
|
|
const QModelIndex& index = ui.treeView->currentIndex();
|
|
|
|
|
if (index.isValid())
|
|
|
|
|
name = index.data().toString();
|
|
|
|
|
ui.bookmarkFolders->setCurrentIndex(ui.bookmarkFolders->findText(name));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkDialog::textChanged(const QString& string)
|
|
|
|
|
{
|
|
|
|
|
ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!string.isEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkDialog::selectBookmarkFolder(const QString &folderName)
|
|
|
|
|
{
|
|
|
|
|
if (folderName.isEmpty())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (folderName == tr("Bookmarks")) {
|
|
|
|
|
ui.treeView->clearSelection();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QStandardItemModel *model = bookmarkManager->treeBookmarkModel();
|
|
|
|
|
QList<QStandardItem*> list = model->findItems(folderName,
|
|
|
|
|
Qt::MatchCaseSensitive | Qt::MatchRecursive, 0);
|
|
|
|
|
if (!list.isEmpty()) {
|
2009-06-24 13:38:19 +02:00
|
|
|
const QModelIndex &index = model->indexFromItem(list.at(0));
|
|
|
|
|
QItemSelectionModel *model = ui.treeView->selectionModel();
|
|
|
|
|
if (model) {
|
|
|
|
|
model->setCurrentIndex(proxyModel->mapFromSource(index),
|
|
|
|
|
QItemSelectionModel::ClearAndSelect);
|
|
|
|
|
}
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkDialog::customContextMenuRequested(const QPoint &point)
|
|
|
|
|
{
|
|
|
|
|
QModelIndex index = ui.treeView->indexAt(point);
|
|
|
|
|
if (!index.isValid())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
QMenu menu(QLatin1String(""), this);
|
|
|
|
|
|
|
|
|
|
QAction *removeItem = menu.addAction(tr("Delete Folder"));
|
|
|
|
|
QAction *renameItem = menu.addAction(tr("Rename Folder"));
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
QAction *picked = menu.exec(ui.treeView->mapToGlobal(point));
|
|
|
|
|
if (!picked)
|
2008-12-02 12:01:29 +01:00
|
|
|
return;
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
const QModelIndex &proxyIndex = proxyModel->mapToSource(index);
|
|
|
|
|
if (picked == removeItem) {
|
|
|
|
|
bookmarkManager->removeBookmarkItem(ui.treeView, proxyIndex);
|
2008-12-02 12:01:29 +01:00
|
|
|
ui.bookmarkFolders->clear();
|
|
|
|
|
ui.bookmarkFolders->addItems(bookmarkManager->bookmarkFolders());
|
|
|
|
|
|
|
|
|
|
QString name = tr("Bookmarks");
|
|
|
|
|
index = ui.treeView->currentIndex();
|
|
|
|
|
if (index.isValid())
|
|
|
|
|
name = index.data().toString();
|
|
|
|
|
ui.bookmarkFolders->setCurrentIndex(ui.bookmarkFolders->findText(name));
|
|
|
|
|
}
|
2009-06-24 13:38:19 +02:00
|
|
|
else if (picked == renameItem) {
|
|
|
|
|
BookmarkModel *model = bookmarkManager->treeBookmarkModel();
|
|
|
|
|
if (QStandardItem *item = model->itemFromIndex(proxyIndex)) {
|
2008-12-02 12:01:29 +01:00
|
|
|
item->setEditable(true);
|
|
|
|
|
ui.treeView->edit(index);
|
|
|
|
|
item->setEditable(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
void BookmarkDialog::currentChanged(const QModelIndex ¤t)
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
2009-06-24 13:38:19 +02:00
|
|
|
QString text = tr("Bookmarks");
|
|
|
|
|
if (current.isValid())
|
|
|
|
|
text = current.data().toString();
|
|
|
|
|
ui.bookmarkFolders->setCurrentIndex(ui.bookmarkFolders->findText(text));
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool BookmarkDialog::eventFilter(QObject *object, QEvent *e)
|
|
|
|
|
{
|
|
|
|
|
if (object == this && e->type() == QEvent::KeyPress) {
|
|
|
|
|
QKeyEvent *ke = static_cast<QKeyEvent*>(e);
|
|
|
|
|
|
|
|
|
|
QModelIndex index = ui.treeView->currentIndex();
|
|
|
|
|
switch (ke->key()) {
|
|
|
|
|
case Qt::Key_F2: {
|
2009-06-24 13:38:19 +02:00
|
|
|
const QModelIndex &source = proxyModel->mapToSource(index);
|
2008-12-02 12:01:29 +01:00
|
|
|
QStandardItem *item =
|
|
|
|
|
bookmarkManager->treeBookmarkModel()->itemFromIndex(source);
|
|
|
|
|
if (item) {
|
|
|
|
|
item->setEditable(true);
|
|
|
|
|
ui.treeView->edit(index);
|
|
|
|
|
item->setEditable(false);
|
|
|
|
|
}
|
|
|
|
|
} break;
|
|
|
|
|
|
|
|
|
|
case Qt::Key_Delete: {
|
|
|
|
|
bookmarkManager->removeBookmarkItem(ui.treeView,
|
|
|
|
|
proxyModel->mapToSource(index));
|
|
|
|
|
ui.bookmarkFolders->clear();
|
|
|
|
|
ui.bookmarkFolders->addItems(bookmarkManager->bookmarkFolders());
|
|
|
|
|
|
|
|
|
|
QString name = tr("Bookmarks");
|
|
|
|
|
index = ui.treeView->currentIndex();
|
|
|
|
|
if (index.isValid())
|
|
|
|
|
name = index.data().toString();
|
|
|
|
|
ui.bookmarkFolders->setCurrentIndex(ui.bookmarkFolders->findText(name));
|
|
|
|
|
} break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return QObject::eventFilter(object, e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
// #pragma mark -- BookmarkWidget
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
BookmarkWidget::BookmarkWidget(BookmarkManager *manager, QWidget *parent,
|
2009-06-24 13:38:19 +02:00
|
|
|
bool showButtons)
|
2008-12-02 12:01:29 +01:00
|
|
|
: QWidget(parent)
|
|
|
|
|
, addButton(0)
|
|
|
|
|
, removeButton(0)
|
|
|
|
|
, bookmarkManager(manager)
|
|
|
|
|
{
|
|
|
|
|
setup(showButtons);
|
|
|
|
|
installEventFilter(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BookmarkWidget::~BookmarkWidget()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkWidget::removeClicked()
|
|
|
|
|
{
|
|
|
|
|
const QModelIndex& index = treeView->currentIndex();
|
|
|
|
|
if (searchField->text().isEmpty()) {
|
|
|
|
|
bookmarkManager->removeBookmarkItem(treeView,
|
|
|
|
|
filterBookmarkModel->mapToSource(index));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkWidget::filterChanged()
|
|
|
|
|
{
|
|
|
|
|
bool searchBookmarks = searchField->text().isEmpty();
|
|
|
|
|
if (!searchBookmarks) {
|
|
|
|
|
regExp.setPattern(searchField->text());
|
|
|
|
|
filterBookmarkModel->setSourceModel(bookmarkManager->listBookmarkModel());
|
|
|
|
|
} else {
|
|
|
|
|
regExp.setPattern(QLatin1String(""));
|
|
|
|
|
filterBookmarkModel->setSourceModel(bookmarkManager->treeBookmarkModel());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (addButton)
|
|
|
|
|
addButton->setEnabled(searchBookmarks);
|
|
|
|
|
|
|
|
|
|
if (removeButton)
|
|
|
|
|
removeButton->setEnabled(searchBookmarks);
|
|
|
|
|
|
|
|
|
|
filterBookmarkModel->setFilterRegExp(regExp);
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
const QModelIndex &index = treeView->indexAt(QPoint(1, 1));
|
2008-12-02 12:01:29 +01:00
|
|
|
if (index.isValid())
|
|
|
|
|
treeView->setCurrentIndex(index);
|
|
|
|
|
|
|
|
|
|
if (searchBookmarks)
|
|
|
|
|
expandItems();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkWidget::expand(const QModelIndex& index)
|
|
|
|
|
{
|
|
|
|
|
const QModelIndex& source = filterBookmarkModel->mapToSource(index);
|
2009-06-24 13:38:19 +02:00
|
|
|
QStandardItem *item =
|
|
|
|
|
bookmarkManager->treeBookmarkModel()->itemFromIndex(source);
|
2008-12-02 12:01:29 +01:00
|
|
|
if (item)
|
|
|
|
|
item->setData(treeView->isExpanded(index), Qt::UserRole + 11);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkWidget::activated(const QModelIndex &index)
|
|
|
|
|
{
|
|
|
|
|
if (!index.isValid())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
QString data = index.data(Qt::UserRole + 10).toString();
|
|
|
|
|
if (data != QLatin1String("Folder"))
|
|
|
|
|
emit requestShowLink(data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkWidget::customContextMenuRequested(const QPoint &point)
|
|
|
|
|
{
|
|
|
|
|
QModelIndex index = treeView->indexAt(point);
|
|
|
|
|
if (!index.isValid())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
QAction *showItem = 0;
|
|
|
|
|
QAction *removeItem = 0;
|
|
|
|
|
QAction *renameItem = 0;
|
|
|
|
|
QAction *showItemNewTab = 0;
|
|
|
|
|
|
|
|
|
|
QMenu menu(QLatin1String(""), this);
|
|
|
|
|
QString data = index.data(Qt::UserRole + 10).toString();
|
|
|
|
|
if (data == QLatin1String("Folder")) {
|
|
|
|
|
removeItem = menu.addAction(tr("Delete Folder"));
|
|
|
|
|
renameItem = menu.addAction(tr("Rename Folder"));
|
|
|
|
|
} else {
|
|
|
|
|
showItem = menu.addAction(tr("Show Bookmark"));
|
|
|
|
|
showItemNewTab = menu.addAction(tr("Show Bookmark in New Tab"));
|
|
|
|
|
if (searchField->text().isEmpty()) {
|
|
|
|
|
menu.addSeparator();
|
|
|
|
|
removeItem = menu.addAction(tr("Delete Bookmark"));
|
|
|
|
|
renameItem = menu.addAction(tr("Rename Bookmark"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
QAction *pickedAction = menu.exec(treeView->mapToGlobal(point));
|
|
|
|
|
if (!pickedAction)
|
2008-12-02 12:01:29 +01:00
|
|
|
return;
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
if (pickedAction == showItem) {
|
2008-12-02 12:01:29 +01:00
|
|
|
emit requestShowLink(data);
|
|
|
|
|
}
|
2009-06-24 13:38:19 +02:00
|
|
|
else if (pickedAction == showItemNewTab) {
|
2009-05-07 15:34:52 +02:00
|
|
|
Help::Internal::CentralWidget::instance()->setSourceInNewTab(data);
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
2009-06-24 13:38:19 +02:00
|
|
|
else if (pickedAction == removeItem) {
|
2008-12-02 12:01:29 +01:00
|
|
|
bookmarkManager->removeBookmarkItem(treeView,
|
|
|
|
|
filterBookmarkModel->mapToSource(index));
|
|
|
|
|
}
|
2009-06-24 13:38:19 +02:00
|
|
|
else if (pickedAction == renameItem) {
|
|
|
|
|
const QModelIndex &source = filterBookmarkModel->mapToSource(index);
|
2008-12-02 12:01:29 +01:00
|
|
|
QStandardItem *item =
|
|
|
|
|
bookmarkManager->treeBookmarkModel()->itemFromIndex(source);
|
|
|
|
|
if (item) {
|
|
|
|
|
item->setEditable(true);
|
|
|
|
|
treeView->edit(index);
|
|
|
|
|
item->setEditable(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkWidget::setup(bool showButtons)
|
|
|
|
|
{
|
|
|
|
|
regExp.setPatternSyntax(QRegExp::FixedString);
|
|
|
|
|
regExp.setCaseSensitivity(Qt::CaseInsensitive);
|
|
|
|
|
|
|
|
|
|
QLayout *vlayout = new QVBoxLayout(this);
|
|
|
|
|
vlayout->setMargin(4);
|
|
|
|
|
|
|
|
|
|
QLabel *label = new QLabel(tr("Filter:"), this);
|
|
|
|
|
vlayout->addWidget(label);
|
|
|
|
|
|
|
|
|
|
searchField = new QLineEdit(this);
|
2009-06-05 12:49:29 +02:00
|
|
|
setFocusProxy(searchField);
|
|
|
|
|
searchField->installEventFilter(this);
|
2008-12-02 12:01:29 +01:00
|
|
|
vlayout->addWidget(searchField);
|
|
|
|
|
connect(searchField, SIGNAL(textChanged(const QString &)), this,
|
|
|
|
|
SLOT(filterChanged()));
|
|
|
|
|
|
|
|
|
|
treeView = new TreeView(this);
|
|
|
|
|
vlayout->addWidget(treeView);
|
|
|
|
|
|
|
|
|
|
#ifdef Q_OS_MAC
|
2009-06-03 20:45:49 +02:00
|
|
|
# define SYSTEM "mac"
|
|
|
|
|
#else
|
|
|
|
|
# define SYSTEM "win"
|
2008-12-02 12:01:29 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if (showButtons) {
|
|
|
|
|
QLayout *hlayout = new QHBoxLayout();
|
|
|
|
|
vlayout->addItem(hlayout);
|
|
|
|
|
|
|
|
|
|
hlayout->addItem(new QSpacerItem(40, 20, QSizePolicy::Expanding));
|
|
|
|
|
|
|
|
|
|
addButton = new QToolButton(this);
|
|
|
|
|
addButton->setText(tr("Add"));
|
2009-06-24 13:38:19 +02:00
|
|
|
addButton->setIcon(QIcon(QLatin1String(":/trolltech/assistant/images/"
|
|
|
|
|
SYSTEM "/addtab.png")));
|
2008-12-02 12:01:29 +01:00
|
|
|
addButton->setAutoRaise(true);
|
|
|
|
|
addButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
|
|
|
|
|
hlayout->addWidget(addButton);
|
|
|
|
|
connect(addButton, SIGNAL(clicked()), this, SIGNAL(addBookmark()));
|
|
|
|
|
|
|
|
|
|
removeButton = new QToolButton(this);
|
|
|
|
|
removeButton->setText(tr("Remove"));
|
2009-06-24 13:38:19 +02:00
|
|
|
removeButton->setIcon(QIcon(QLatin1String(":/trolltech/assistant/images/"
|
|
|
|
|
SYSTEM "/closetab.png")));
|
2008-12-02 12:01:29 +01:00
|
|
|
removeButton->setAutoRaise(true);
|
|
|
|
|
removeButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
|
|
|
|
|
hlayout->addWidget(removeButton);
|
|
|
|
|
connect(removeButton, SIGNAL(clicked()), this, SLOT(removeClicked()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
filterBookmarkModel = new QSortFilterProxyModel(this);
|
|
|
|
|
treeView->setModel(filterBookmarkModel);
|
|
|
|
|
|
|
|
|
|
treeView->setDragEnabled(true);
|
|
|
|
|
treeView->setAcceptDrops(true);
|
|
|
|
|
treeView->setAutoExpandDelay(1000);
|
|
|
|
|
treeView->setDropIndicatorShown(true);
|
|
|
|
|
treeView->header()->setVisible(false);
|
|
|
|
|
treeView->viewport()->installEventFilter(this);
|
|
|
|
|
treeView->setContextMenuPolicy(Qt::CustomContextMenu);
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
connect(treeView, SIGNAL(expanded(QModelIndex)), this,
|
|
|
|
|
SLOT(expand(QModelIndex)));
|
|
|
|
|
connect(treeView, SIGNAL(collapsed(QModelIndex)), this,
|
|
|
|
|
SLOT(expand(QModelIndex)));
|
|
|
|
|
connect(treeView, SIGNAL(activated(QModelIndex)), this,
|
|
|
|
|
SLOT(activated(QModelIndex)));
|
|
|
|
|
connect(treeView, SIGNAL(customContextMenuRequested(QPoint)),
|
|
|
|
|
this, SLOT(customContextMenuRequested(QPoint)));
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
filterBookmarkModel->setFilterKeyColumn(0);
|
|
|
|
|
filterBookmarkModel->setDynamicSortFilter(true);
|
|
|
|
|
filterBookmarkModel->setSourceModel(bookmarkManager->treeBookmarkModel());
|
|
|
|
|
|
|
|
|
|
expandItems();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkWidget::expandItems()
|
|
|
|
|
{
|
|
|
|
|
QStandardItemModel *model = bookmarkManager->treeBookmarkModel();
|
|
|
|
|
QList<QStandardItem*>list = model->findItems(QLatin1String("*"),
|
|
|
|
|
Qt::MatchWildcard | Qt::MatchRecursive, 0);
|
|
|
|
|
foreach (const QStandardItem* item, list) {
|
|
|
|
|
const QModelIndex& index = model->indexFromItem(item);
|
|
|
|
|
treeView->setExpanded(filterBookmarkModel->mapFromSource(index),
|
|
|
|
|
item->data(Qt::UserRole + 11).toBool());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool BookmarkWidget::eventFilter(QObject *object, QEvent *e)
|
|
|
|
|
{
|
2009-05-18 14:03:13 +02:00
|
|
|
if ((object == this) || (object == treeView->viewport())) {
|
2008-12-02 12:01:29 +01:00
|
|
|
QModelIndex index = treeView->currentIndex();
|
2009-05-18 14:03:13 +02:00
|
|
|
if (e->type() == QEvent::KeyPress) {
|
|
|
|
|
QKeyEvent *ke = static_cast<QKeyEvent*>(e);
|
2008-12-02 12:01:29 +01:00
|
|
|
if (index.isValid() && searchField->text().isEmpty()) {
|
2009-06-24 13:38:19 +02:00
|
|
|
const QModelIndex &src = filterBookmarkModel->mapToSource(index);
|
2009-05-18 14:03:13 +02:00
|
|
|
if (ke->key() == Qt::Key_F2) {
|
2009-06-24 13:38:19 +02:00
|
|
|
QStandardItem *item =
|
|
|
|
|
bookmarkManager->treeBookmarkModel()->itemFromIndex(src);
|
2008-12-02 12:01:29 +01:00
|
|
|
if (item) {
|
|
|
|
|
item->setEditable(true);
|
|
|
|
|
treeView->edit(index);
|
|
|
|
|
item->setEditable(false);
|
|
|
|
|
}
|
2009-05-18 14:03:13 +02:00
|
|
|
} else if (ke->key() == Qt::Key_Delete) {
|
2009-06-24 13:38:19 +02:00
|
|
|
bookmarkManager->removeBookmarkItem(treeView, src);
|
2009-05-18 14:03:13 +02:00
|
|
|
}
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2009-05-18 14:03:13 +02:00
|
|
|
switch (ke->key()) {
|
|
|
|
|
default: break;
|
|
|
|
|
case Qt::Key_Up: {
|
|
|
|
|
case Qt::Key_Down:
|
|
|
|
|
treeView->subclassKeyPressEvent(ke);
|
|
|
|
|
} break;
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-05-18 14:03:13 +02:00
|
|
|
case Qt::Key_Enter: {
|
|
|
|
|
case Qt::Key_Return:
|
|
|
|
|
index = treeView->selectionModel()->currentIndex();
|
|
|
|
|
if (index.isValid()) {
|
|
|
|
|
QString data = index.data(Qt::UserRole + 10).toString();
|
|
|
|
|
if (!data.isEmpty() && data != QLatin1String("Folder"))
|
|
|
|
|
emit requestShowLink(data);
|
|
|
|
|
}
|
|
|
|
|
} break;
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-05-18 14:03:13 +02:00
|
|
|
case Qt::Key_Escape: {
|
|
|
|
|
emit escapePressed();
|
|
|
|
|
} break;
|
|
|
|
|
}
|
|
|
|
|
} else if (e->type() == QEvent::MouseButtonRelease) {
|
|
|
|
|
if (index.isValid()) {
|
|
|
|
|
QMouseEvent *me = static_cast<QMouseEvent*>(e);
|
|
|
|
|
bool controlPressed = me->modifiers() & Qt::ControlModifier;
|
|
|
|
|
if(((me->button() == Qt::LeftButton) && controlPressed)
|
|
|
|
|
|| (me->button() == Qt::MidButton)) {
|
|
|
|
|
QString data = index.data(Qt::UserRole + 10).toString();
|
|
|
|
|
if (!data.isEmpty() && data != QLatin1String("Folder"))
|
|
|
|
|
Help::Internal::CentralWidget::instance()->setSourceInNewTab(data);
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
2009-06-05 12:49:29 +02:00
|
|
|
} else if (object == searchField && e->type() == QEvent::FocusIn) {
|
|
|
|
|
if (static_cast<QFocusEvent *>(e)->reason() != Qt::MouseFocusReason) {
|
|
|
|
|
searchField->selectAll();
|
|
|
|
|
searchField->setFocus();
|
|
|
|
|
|
|
|
|
|
QModelIndex index = treeView->indexAt(QPoint(1, 1));
|
|
|
|
|
if (index.isValid())
|
|
|
|
|
treeView->setCurrentIndex(index);
|
|
|
|
|
}
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
return QWidget::eventFilter(object, e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
// #pragma mark -- BookmarkModel
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
BookmarkModel::BookmarkModel(int rows, int columns, QObject * parent)
|
|
|
|
|
: QStandardItemModel(rows, columns, parent)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BookmarkModel::~BookmarkModel()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Qt::DropActions BookmarkModel::supportedDropActions() const
|
|
|
|
|
{
|
|
|
|
|
return Qt::MoveAction;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Qt::ItemFlags BookmarkModel::flags(const QModelIndex &index) const
|
|
|
|
|
{
|
|
|
|
|
Qt::ItemFlags defaultFlags = QStandardItemModel::flags(index);
|
2009-06-24 13:38:19 +02:00
|
|
|
if ((!index.isValid()) // can only happen for the invisible root item
|
|
|
|
|
|| index.data(Qt::UserRole + 10).toString() == QLatin1String("Folder"))
|
2008-12-02 12:01:29 +01:00
|
|
|
return (Qt::ItemIsDropEnabled | defaultFlags) &~ Qt::ItemIsDragEnabled;
|
|
|
|
|
|
|
|
|
|
return (Qt::ItemIsDragEnabled | defaultFlags) &~ Qt::ItemIsDropEnabled;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
// #pragma mark -- BookmarkManager
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
|
2010-02-15 11:07:45 +01:00
|
|
|
BookmarkManager::BookmarkManager(QHelpEngineCore* _helpEngine) :
|
|
|
|
|
m_folderIcon(QApplication::style()->standardIcon(QStyle::SP_DirClosedIcon)),
|
|
|
|
|
m_bookmarkIcon(QLatin1String(":/help/images/bookmark.png")),
|
|
|
|
|
treeModel(new BookmarkModel(0, 1, this)),
|
2010-03-23 17:29:43 +01:00
|
|
|
listModel(new BookmarkModel(0, 1, this))
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
connect(treeModel, SIGNAL(itemChanged(QStandardItem*)), this,
|
|
|
|
|
SLOT(itemChanged(QStandardItem*)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BookmarkManager::~BookmarkManager()
|
|
|
|
|
{
|
|
|
|
|
treeModel->clear();
|
|
|
|
|
listModel->clear();
|
|
|
|
|
}
|
|
|
|
|
|
2010-03-23 17:00:41 +01:00
|
|
|
BookmarkModel* BookmarkManager::treeBookmarkModel() const
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
return treeModel;
|
|
|
|
|
}
|
|
|
|
|
|
2010-03-23 17:00:41 +01:00
|
|
|
BookmarkModel* BookmarkManager::listBookmarkModel() const
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
return listModel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkManager::saveBookmarks()
|
|
|
|
|
{
|
|
|
|
|
QByteArray bookmarks;
|
|
|
|
|
QDataStream stream(&bookmarks, QIODevice::WriteOnly);
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
readBookmarksRecursive(treeModel->invisibleRootItem(), stream, 0);
|
2010-03-23 17:29:43 +01:00
|
|
|
(&Help::HelpManager::helpEngineCore())->setCustomValue(QLatin1String("Bookmarks"),
|
|
|
|
|
bookmarks);
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QStringList BookmarkManager::bookmarkFolders() const
|
|
|
|
|
{
|
|
|
|
|
QStringList folders(tr("Bookmarks"));
|
|
|
|
|
|
|
|
|
|
QList<QStandardItem*>list = treeModel->findItems(QLatin1String("*"),
|
|
|
|
|
Qt::MatchWildcard | Qt::MatchRecursive, 0);
|
|
|
|
|
|
|
|
|
|
QString data;
|
|
|
|
|
foreach (const QStandardItem *item, list) {
|
|
|
|
|
data = item->data(Qt::UserRole + 10).toString();
|
|
|
|
|
if (data == QLatin1String("Folder"))
|
|
|
|
|
folders << item->data(Qt::DisplayRole).toString();
|
|
|
|
|
}
|
|
|
|
|
return folders;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QModelIndex BookmarkManager::addNewFolder(const QModelIndex& index)
|
|
|
|
|
{
|
|
|
|
|
QStandardItem *item = new QStandardItem(uniqueFolderName());
|
|
|
|
|
item->setEditable(false);
|
2010-02-15 11:07:45 +01:00
|
|
|
item->setIcon(m_folderIcon);
|
2008-12-02 12:01:29 +01:00
|
|
|
item->setData(false, Qt::UserRole + 11);
|
|
|
|
|
item->setData(QLatin1String("Folder"), Qt::UserRole + 10);
|
|
|
|
|
item->setIcon(QApplication::style()->standardIcon(QStyle::SP_DirClosedIcon));
|
|
|
|
|
|
|
|
|
|
if (index.isValid()) {
|
|
|
|
|
treeModel->itemFromIndex(index)->appendRow(item);
|
|
|
|
|
} else {
|
|
|
|
|
treeModel->appendRow(item);
|
|
|
|
|
}
|
|
|
|
|
return treeModel->indexFromItem(item);
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
void BookmarkManager::removeBookmarkItem(QTreeView *treeView,
|
|
|
|
|
const QModelIndex& index)
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
QStandardItem *item = treeModel->itemFromIndex(index);
|
|
|
|
|
if (item) {
|
|
|
|
|
QString data = index.data(Qt::UserRole + 10).toString();
|
|
|
|
|
if (data == QLatin1String("Folder") && item->rowCount() > 0) {
|
|
|
|
|
int value = QMessageBox::question(treeView, tr("Remove"),
|
2009-06-24 13:38:19 +02:00
|
|
|
tr("You are going to delete a Folder which will also<br>"
|
|
|
|
|
"remove its content. Are you sure you would like to continue?"),
|
|
|
|
|
QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
if (value == QMessageBox::Cancel)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (data != QLatin1String("Folder")) {
|
|
|
|
|
QList<QStandardItem*>itemList = listModel->findItems(item->text());
|
|
|
|
|
foreach (const QStandardItem *i, itemList) {
|
|
|
|
|
if (i->data(Qt::UserRole + 10) == data) {
|
|
|
|
|
listModel->removeRow(i->row());
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
removeBookmarkFolderItems(item);
|
|
|
|
|
}
|
|
|
|
|
treeModel->removeRow(item->row(), index.parent());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkManager::showBookmarkDialog(QWidget* parent, const QString &name,
|
2009-06-24 13:38:19 +02:00
|
|
|
const QString &url)
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
BookmarkDialog dialog(this, name, url, parent);
|
|
|
|
|
dialog.exec();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkManager::addNewBookmark(const QModelIndex& index,
|
2009-06-24 13:38:19 +02:00
|
|
|
const QString &name, const QString &url)
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
QStandardItem *item = new QStandardItem(name);
|
|
|
|
|
item->setEditable(false);
|
2010-02-15 11:07:45 +01:00
|
|
|
item->setIcon(m_bookmarkIcon);
|
2008-12-02 12:01:29 +01:00
|
|
|
item->setData(false, Qt::UserRole + 11);
|
|
|
|
|
item->setData(url, Qt::UserRole + 10);
|
2010-01-29 21:33:57 +01:00
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
if (index.isValid())
|
2008-12-02 12:01:29 +01:00
|
|
|
treeModel->itemFromIndex(index)->appendRow(item);
|
2009-06-24 13:38:19 +02:00
|
|
|
else
|
2008-12-02 12:01:29 +01:00
|
|
|
treeModel->appendRow(item);
|
2009-06-24 13:38:19 +02:00
|
|
|
listModel->appendRow(item->clone());
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkManager::itemChanged(QStandardItem *item)
|
|
|
|
|
{
|
|
|
|
|
if (renameItem != item) {
|
|
|
|
|
renameItem = item;
|
|
|
|
|
oldText = item->text();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (item->text() != oldText) {
|
|
|
|
|
if (item->data(Qt::UserRole + 10).toString() != QLatin1String("Folder")) {
|
|
|
|
|
QList<QStandardItem*>itemList = listModel->findItems(oldText);
|
|
|
|
|
if (itemList.count() > 0)
|
|
|
|
|
itemList.at(0)->setText(item->text());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkManager::setupBookmarkModels()
|
|
|
|
|
{
|
|
|
|
|
treeModel->clear();
|
|
|
|
|
listModel->clear();
|
|
|
|
|
|
|
|
|
|
qint32 depth;
|
|
|
|
|
bool expanded;
|
|
|
|
|
QString name, type;
|
|
|
|
|
QList<int> lastDepths;
|
|
|
|
|
QList<QStandardItem*> parents;
|
|
|
|
|
|
2010-03-23 17:29:43 +01:00
|
|
|
QByteArray ba = Help::HelpManager::helpEngineCore()
|
|
|
|
|
.customValue(QLatin1String("Bookmarks")).toByteArray();
|
2008-12-02 12:01:29 +01:00
|
|
|
QDataStream stream(ba);
|
|
|
|
|
while (!stream.atEnd()) {
|
|
|
|
|
stream >> depth >> name >> type >> expanded;
|
|
|
|
|
|
|
|
|
|
QStandardItem *item = new QStandardItem(name);
|
|
|
|
|
item->setEditable(false);
|
|
|
|
|
item->setData(type, Qt::UserRole + 10);
|
|
|
|
|
item->setData(expanded, Qt::UserRole + 11);
|
|
|
|
|
if (depth == 0) {
|
|
|
|
|
parents.clear(); lastDepths.clear();
|
|
|
|
|
treeModel->appendRow(item);
|
|
|
|
|
parents << item; lastDepths << depth;
|
|
|
|
|
} else {
|
|
|
|
|
if (depth <= lastDepths.last()) {
|
|
|
|
|
while (depth <= lastDepths.last() && parents.count() > 0) {
|
|
|
|
|
parents.pop_back(); lastDepths.pop_back();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
parents.last()->appendRow(item);
|
|
|
|
|
if (type == QLatin1String("Folder")) {
|
|
|
|
|
parents << item; lastDepths << depth;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-24 13:38:19 +02:00
|
|
|
if (type != QLatin1String("Folder")) {
|
2010-02-15 11:07:45 +01:00
|
|
|
item->setIcon(m_bookmarkIcon);
|
2008-12-02 12:01:29 +01:00
|
|
|
listModel->appendRow(item->clone());
|
2009-06-24 13:38:19 +02:00
|
|
|
} else {
|
2010-02-15 11:07:45 +01:00
|
|
|
item->setIcon(m_folderIcon);
|
2009-06-24 13:38:19 +02:00
|
|
|
}
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString BookmarkManager::uniqueFolderName() const
|
|
|
|
|
{
|
|
|
|
|
QString folderName = tr("New Folder");
|
|
|
|
|
QList<QStandardItem*> list = treeModel->findItems(folderName,
|
|
|
|
|
Qt::MatchContains | Qt::MatchRecursive, 0);
|
|
|
|
|
if (!list.isEmpty()) {
|
|
|
|
|
QStringList names;
|
|
|
|
|
foreach (const QStandardItem *item, list)
|
|
|
|
|
names << item->text();
|
|
|
|
|
|
2010-02-08 11:07:18 +01:00
|
|
|
QString folderNameBase = tr("New Folder") + QLatin1String(" %1");
|
2008-12-02 12:01:29 +01:00
|
|
|
for (int i = 1; i <= names.count(); ++i) {
|
2010-02-08 11:07:18 +01:00
|
|
|
folderName = folderNameBase.arg(i);
|
2008-12-02 12:01:29 +01:00
|
|
|
if (!names.contains(folderName))
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return folderName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkManager::removeBookmarkFolderItems(QStandardItem *item)
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j < item->rowCount(); ++j) {
|
|
|
|
|
QStandardItem *child = item->child(j);
|
|
|
|
|
if (child->rowCount() > 0)
|
|
|
|
|
removeBookmarkFolderItems(child);
|
|
|
|
|
|
|
|
|
|
QString data = child->data(Qt::UserRole + 10).toString();
|
|
|
|
|
QList<QStandardItem*>itemList = listModel->findItems(child->text());
|
|
|
|
|
foreach (const QStandardItem *i, itemList) {
|
|
|
|
|
if (i->data(Qt::UserRole + 10) == data) {
|
|
|
|
|
listModel->removeRow(i->row());
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BookmarkManager::readBookmarksRecursive(const QStandardItem *item,
|
2009-06-24 13:38:19 +02:00
|
|
|
QDataStream &stream, const qint32 depth) const
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
for (int j = 0; j < item->rowCount(); ++j) {
|
|
|
|
|
const QStandardItem *child = item->child(j);
|
|
|
|
|
stream << depth;
|
|
|
|
|
stream << child->data(Qt::DisplayRole).toString();
|
|
|
|
|
stream << child->data(Qt::UserRole + 10).toString();
|
|
|
|
|
stream << child->data(Qt::UserRole + 11).toBool();
|
|
|
|
|
|
|
|
|
|
if (child->rowCount() > 0)
|
|
|
|
|
readBookmarksRecursive(child, stream, (depth +1));
|
|
|
|
|
}
|
|
|
|
|
}
|