1
mirror of https://invent.kde.org/network/falkon.git synced 2024-11-11 01:22:10 +01:00

[Bookmarks] Clean dead code in Bookmarks & TreeWidget

This commit is contained in:
nowrep 2014-02-09 12:43:06 +01:00
parent 2ea155560a
commit 877eefec22
6 changed files with 14 additions and 770 deletions

View File

@ -18,23 +18,16 @@
#include "bookmarks.h"
#include "bookmarkitem.h"
#include "bookmarksmodel.h"
#include "tabbedwebview.h"
#include "iconprovider.h"
#include "mainapplication.h"
#include "webview.h"
#include "settings.h"
#include "json.h"
#include <QSqlQuery>
#include <QTextStream>
#include <QBuffer>
#include <QDebug>
#include <QFile>
// SQLite DB -> table bookmarks + folders
// Unique in bookmarks table is id
// However from bookmark icon, it is not possible to add more than one bookmark
// Only from Ctrl+D dialog it is possible
Bookmarks::Bookmarks(QObject* parent)
: QObject(parent)
{
@ -237,7 +230,7 @@ void Bookmarks::loadSettings()
settings.beginGroup("Bookmarks");
m_showMostVisited = settings.value("showMostVisited", true).toBool();
m_showOnlyIconsInToolbar = settings.value("showOnlyIconsInToolbar", false).toBool();
m_lastFolder = settings.value("LastFolder", "unsorted").toString();
//m_lastFolder = settings.value("LastFolder", "unsorted").toString();
settings.endGroup();
}
@ -269,355 +262,12 @@ void Bookmarks::setShowingOnlyIconsInToolbar(bool state)
m_showOnlyIconsInToolbar = state;
}
bool Bookmarks::isFolder(const QString &name)
{
if (name == QLatin1String("bookmarksToolbar") || name == QLatin1String("bookmarksMenu")
|| name == QLatin1String("unsorted") || name == _bookmarksToolbar
|| name == _bookmarksMenu || name == _bookmarksUnsorted) {
return true;
}
QSqlQuery query;
query.prepare("SELECT name FROM folders WHERE name = ?");
query.bindValue(0, name);
query.exec();
return query.next();
}
QString Bookmarks::lastFolder() const
{
return m_lastFolder;
}
void Bookmarks::setLastFolder(const QString &folder)
{
Settings settings;
settings.beginGroup("Bookmarks");
settings.setValue("lastFolder", folder);
settings.endGroup();
m_lastFolder = folder;
}
bool Bookmarks::isBookmarked(const QUrl &url)
{
QSqlQuery query;
query.prepare("SELECT count(id) FROM bookmarks WHERE url=?");
query.bindValue(0, url.toString());
if (!query.exec() || !query.next()) {
return false;
}
return query.value(0).toInt() > 0;
}
// Bookmark search priority:
// Bookmarks in menu > bookmarks in toolbar -> user folders and unsorted
Bookmarks::Bookmark Bookmarks::getBookmark(const QUrl &url)
{
QSqlQuery query;
query.prepare("SELECT id FROM bookmarks WHERE url=? AND folder='bookmarksMenu' ");
query.bindValue(0, url.toString());
query.exec();
if (query.next()) {
return getBookmark(query.value(0).toInt());
}
query.prepare("SELECT id FROM bookmarks WHERE url=? AND folder='bookmarksToolbar' ");
query.bindValue(0, url.toString());
query.exec();
if (query.next()) {
return getBookmark(query.value(0).toInt());
}
query.prepare("SELECT id FROM bookmarks WHERE url=? ");
query.bindValue(0, url.toString());
query.exec();
if (query.next()) {
return getBookmark(query.value(0).toInt());
}
return Bookmark();
}
Bookmarks::Bookmark Bookmarks::getBookmark(int id)
{
Bookmark bookmark;
QSqlQuery query;
query.prepare("SELECT url, title, folder, icon FROM bookmarks WHERE id=?");
query.bindValue(0, id);
query.exec();
if (query.next()) {
bookmark.id = id;
bookmark.url = query.value(0).toUrl();
bookmark.title = query.value(1).toString();
bookmark.folder = query.value(2).toString();
bookmark.image = QImage::fromData(query.value(3).toByteArray());
bookmark.inSubfolder = isSubfolder(bookmark.folder);
}
return bookmark;
}
bool Bookmarks::saveBookmark(const QUrl &url, const QString &title, const QIcon &icon, const QString &folder)
{
if (url.isEmpty() || title.isEmpty() || folder.isEmpty()) {
return false;
}
QImage image = icon.pixmap(16, 16).toImage();
if (image.isNull()) {
image = qIconProvider->emptyWebImage();
}
// createFolder() calls isFolder()
createFolder(folder);
QSqlQuery query;
query.prepare("INSERT INTO bookmarks (url, title, folder, icon) VALUES (?,?,?,?)");
query.bindValue(0, url.toString());
query.bindValue(1, title);
query.bindValue(2, folder);
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "PNG");
query.bindValue(3, buffer.data());
query.exec();
Bookmark bookmark;
bookmark.id = query.lastInsertId().toInt();
bookmark.url = url;
bookmark.title = title;
bookmark.folder = folder;
bookmark.image = image;
bookmark.inSubfolder = isSubfolder(bookmark.folder);
setLastFolder(folder);
emit bookmarkAdded(bookmark);
mApp->sendMessages(Qz::AM_BookmarksChanged, true);
return true;
}
bool Bookmarks::saveBookmark(WebView* view, QString folder)
{
if (folder.isEmpty()) {
folder = m_lastFolder;
}
return saveBookmark(view->url(), view->title(), view->icon(), folder);
}
void Bookmarks::removeBookmark(int id)
{
QList<int> list;
list.append(id);
return removeBookmark(list);
}
void Bookmarks::removeBookmark(const QList<int> list)
{
QSqlDatabase db = QSqlDatabase::database();
db.transaction();
foreach (int id, list) {
QSqlQuery query;
query.prepare("SELECT url, title, folder FROM bookmarks WHERE id = ?");
query.bindValue(0, id);
query.exec();
if (!query.next()) {
continue;
}
Bookmark bookmark;
bookmark.id = id;
bookmark.url = query.value(0).toUrl();
bookmark.title = query.value(1).toString();
bookmark.folder = query.value(2).toString();
bookmark.image = QImage::fromData(query.value(3).toByteArray());
bookmark.inSubfolder = isSubfolder(bookmark.folder);
query.prepare("DELETE FROM bookmarks WHERE id=?");
query.addBindValue(id);
query.exec();
if (!query.exec()) {
continue;
}
emit bookmarkDeleted(bookmark);
}
db.commit();
mApp->sendMessages(Qz::AM_BookmarksChanged, true);
}
bool Bookmarks::editBookmark(int id, const QString &title, const QUrl &url, const QString &folder)
{
if (title.isEmpty() && url.isEmpty() && folder.isEmpty()) {
return false;
}
QSqlQuery query;
query.prepare("SELECT title, url, folder, icon FROM bookmarks WHERE id=?");
query.addBindValue(id);
query.exec();
if (!query.next()) {
return false;
}
Bookmark before;
before.id = id;
before.title = query.value(0).toString();
before.url = query.value(1).toUrl();
before.folder = query.value(2).toString();
before.image = QImage::fromData(query.value(3).toByteArray());
before.inSubfolder = isSubfolder(before.folder);
Bookmark after;
after.id = id;
after.title = title.isEmpty() ? before.title : title;
after.url = url.isEmpty() ? before.url : url;
after.folder = folder.isEmpty() ? before.folder : folder;
after.image = before.image;
after.inSubfolder = isSubfolder(after.folder);
query.prepare("UPDATE bookmarks SET title=?, url=?, folder=? WHERE id = ?");
query.bindValue(0, after.title);
query.bindValue(1, after.url.toString());
query.bindValue(2, after.folder);
query.bindValue(3, id);
if (!query.exec()) {
return false;
}
emit bookmarkEdited(before, after);
mApp->sendMessages(Qz::AM_BookmarksChanged, true);
return true;
}
bool Bookmarks::changeIcon(int id, const QIcon &icon)
{
QSqlQuery query;
query.prepare("SELECT title, url, folder, icon FROM bookmarks WHERE id=?");
query.addBindValue(id);
query.exec();
if (!query.next()) {
return false;
}
Bookmark before;
before.id = id;
before.title = query.value(0).toString();
before.url = query.value(1).toUrl();
before.folder = query.value(2).toString();
before.image = QImage::fromData(query.value(3).toByteArray());
before.inSubfolder = isSubfolder(before.folder);
Bookmark after = before;
after.image = icon.pixmap(16).toImage();
query.prepare("UPDATE bookmarks SET icon = ? WHERE id = ?");
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
after.image.save(&buffer, "PNG");
query.bindValue(0, buffer.data());
query.bindValue(1, id);
if (!query.exec()) {
return false;
}
emit bookmarkEdited(before, after);
mApp->sendMessages(Qz::AM_BookmarksChanged, true);
return true;
}
bool Bookmarks::createFolder(const QString &name)
{
if (isFolder(name)) {
return false;
}
QSqlQuery query;
query.prepare("INSERT INTO folders (name, subfolder) VALUES (?, 'no')");
query.bindValue(0, name);
if (!query.exec()) {
return false;
}
emit folderAdded(name);
mApp->sendMessages(Qz::AM_BookmarksChanged, true);
return true;
}
void Bookmarks::removeFolder(const QString &name)
{
if (name == _bookmarksMenu || name == _bookmarksToolbar) {
return;
}
QSqlQuery query;
query.prepare("SELECT id FROM bookmarks WHERE folder = ? ");
query.bindValue(0, name);
if (!query.exec()) {
return;
}
QList<int> list;
while (query.next()) {
list.append(query.value(0).toInt());
}
removeBookmark(list);
query.prepare("DELETE FROM folders WHERE name=?");
query.bindValue(0, name);
query.exec();
if (name == m_lastFolder) {
setLastFolder("unsorted");
}
emit folderDeleted(name);
mApp->sendMessages(Qz::AM_BookmarksChanged, true);
}
bool Bookmarks::renameFolder(const QString &before, const QString &after)
{
QSqlQuery query;
query.prepare("SELECT name FROM folders WHERE name = ?");
query.bindValue(0, after);
query.exec();
if (query.next()) {
return false;
}
query.prepare("UPDATE folders SET name=? WHERE name=?");
query.bindValue(0, after);
query.bindValue(1, before);
if (!query.exec()) {
return false;
}
query.prepare("UPDATE bookmarks SET folder=? WHERE folder=?");
query.bindValue(0, after);
query.bindValue(1, before);
if (!query.exec()) {
return false;
}
emit folderRenamed(before, after);
return true;
}
void Bookmarks::exportToHtml(const QString &fileName)
@ -713,7 +363,7 @@ QVector<Bookmark> Bookmarks::getFolderBookmarks(const QString &name)
bookmark.title = query.value(2).toString();
bookmark.folder = query.value(3).toString();
bookmark.image = QImage::fromData(query.value(4).toByteArray());
bookmark.inSubfolder = isSubfolder(bookmark.folder);
bookmark.inSubfolder = true;
list.append(bookmark);
}
@ -721,37 +371,6 @@ QVector<Bookmark> Bookmarks::getFolderBookmarks(const QString &name)
return list;
}
bool Bookmarks::createSubfolder(const QString &name)
{
if (isFolder(name)) {
return false;
}
QSqlQuery query;
query.prepare("INSERT INTO folders (name, subfolder) VALUES (?, 'yes')");
query.bindValue(0, name);
if (!query.exec()) {
return false;
}
emit subfolderAdded(name);
mApp->sendMessages(Qz::AM_BookmarksChanged, true);
return true;
}
bool Bookmarks::isSubfolder(const QString &name)
{
QSqlQuery query;
query.prepare("SELECT subfolder FROM folders WHERE name = ?");
query.bindValue(0, name);
query.exec();
if (!query.next()) {
return false;
}
return query.value(0).toString() == QLatin1String("yes");
}
QString Bookmarks::toTranslatedFolder(const QString &name)
{
QString trFolder;
@ -813,12 +432,17 @@ BookmarkItem* Bookmarks::unsortedFolder() const
return m_folderUnsorted;
}
BookmarkItem* Bookmarks::getLastFolder() const
BookmarkItem* Bookmarks::lastUsedFolder() const
{
// TODO: Make it actually return last used folder
return unsortedFolder();
}
bool Bookmarks::isBookmarked(const QUrl &url)
{
return !searchBookmarks(url).isEmpty();
}
QList<BookmarkItem*> Bookmarks::searchBookmarks(const QUrl &url) const
{
QList<BookmarkItem*> items;
@ -873,75 +497,3 @@ void Bookmarks::insertBookmark(BookmarkItem* parent, int row, BookmarkItem* item
m_model->addBookmark(parent, row, item);
emit bookmarkAdded(item);
}
void Bookmarks::changeBookmarkParent(int id, const QString &newParent, const QString &oldParent, bool* ok)
{
QSqlQuery query;
query.prepare("SELECT title, url, icon FROM bookmarks WHERE id=?");
query.addBindValue(id);
query.exec();
if (!query.next()) {
if (ok) {
*ok = false;
}
return;
}
QString title = query.value(0).toString();
QUrl url = query.value(1).toUrl();
QByteArray imageData = query.value(2).toByteArray();
query.prepare("UPDATE bookmarks SET folder = ? WHERE id = ?");
query.bindValue(0, Bookmarks::fromTranslatedFolder(newParent));
query.bindValue(1, id);
if (!query.exec()) {
if (ok) {
*ok = false;
}
return;
}
emit bookmarkParentChanged(title, imageData, id, url, oldParent, newParent);
mApp->sendMessages(Qz::AM_BookmarksChanged, true);
if (ok) {
*ok = true;
}
}
void Bookmarks::changeFolderParent(const QString &name, bool isSubfolder, bool* ok)
{
if (name.isEmpty()) {
return;
}
QSqlQuery query;
query.prepare("UPDATE folders SET subfolder=? WHERE name=?");
query.bindValue(0, isSubfolder ? "yes" : "no");
query.bindValue(1, Bookmarks::fromTranslatedFolder(name));
if (!query.exec()) {
if (ok) {
*ok = false;
}
return;
}
emit folderParentChanged(name, isSubfolder);
mApp->sendMessages(Qz::AM_BookmarksChanged, true);
if (ok) {
*ok = true;
}
}
void Bookmarks::bookmarkDropedLink(const QUrl &url, const QString &title, const QVariant &imageVariant, const QString &folder, bool* ok)
{
QIcon icon = qIconProvider->iconFromImage(qvariant_cast<QImage>(imageVariant));
bool result = saveBookmark(url, title, icon, Bookmarks::fromTranslatedFolder(folder));
if (ok) {
*ok = result;
}
}

View File

@ -68,32 +68,10 @@ public:
bool isShowingOnlyIconsInToolbar() const;
void setShowingOnlyIconsInToolbar(bool state);
bool isFolder(const QString &name);
QString lastFolder() const;
void setLastFolder(const QString &folder);
bool isBookmarked(const QUrl &url);
Bookmark getBookmark(int id);
Bookmark getBookmark(const QUrl &url);
QVector<Bookmark> getFolderBookmarks(const QString &name);
bool saveBookmark(const QUrl &url, const QString &title, const QIcon &icon, const QString &folder = QLatin1String("unsorted"));
bool saveBookmark(WebView* view, QString folder = QString());
void removeBookmark(int id);
void removeBookmark(const QList<int> list);
bool editBookmark(int id, const QString &title = QString(), const QUrl &url = QUrl(), const QString &folder = QString());
bool changeIcon(int id, const QIcon &icon);
bool createFolder(const QString &name);
void removeFolder(const QString &name);
bool renameFolder(const QString &before, const QString &after);
bool createSubfolder(const QString &name);
bool isSubfolder(const QString &name);
void exportToHtml(const QString &fileName);
@ -106,8 +84,9 @@ public:
BookmarkItem* toolbarFolder() const;
BookmarkItem* menuFolder() const;
BookmarkItem* unsortedFolder() const;
BookmarkItem* getLastFolder() const;
BookmarkItem* lastUsedFolder() const;
bool isBookmarked(const QUrl &url);
QList<BookmarkItem*> searchBookmarks(const QUrl &url) const;
bool canBeModified(BookmarkItem* item) const;
@ -119,21 +98,6 @@ public:
void notifyBookmarkChanged(BookmarkItem* item);
signals:
void bookmarkAdded(const Bookmarks::Bookmark &bookmark);
void bookmarkDeleted(const Bookmarks::Bookmark &bookmark);
void bookmarkEdited(const Bookmarks::Bookmark &before, const Bookmarks::Bookmark &after);
void bookmarkParentChanged(const QString &name, const QByteArray &imageData, int id,
const QUrl &url, const QString &oldParent, const QString &newParent);
void folderAdded(const QString &title);
void folderDeleted(const QString &title);
void subfolderAdded(const QString &title);
void folderRenamed(const QString &before, const QString &after);
void folderParentChanged(const QString &name, bool isSubfolder);
// Item was added to bookmarks
void bookmarkAdded(BookmarkItem* item);
// Item was removed from bookmarks
@ -141,12 +105,6 @@ signals:
// Item data has changed
void bookmarkChanged(BookmarkItem* item);
public slots:
void bookmarkDropedLink(const QUrl &url, const QString &title, const QVariant &imageVariant,
const QString &folder = QLatin1String("unsorted"), bool* ok = 0);
void changeBookmarkParent(int id, const QString &newParent, const QString &oldParent, bool* ok = 0);
void changeFolderParent(const QString &name, bool isSubfolder, bool* ok = 0);
private:
void loadBookmarks();
@ -157,7 +115,6 @@ private:
bool m_showMostVisited;
bool m_showOnlyIconsInToolbar;
QString m_lastFolder;
BookmarkItem* m_root;
BookmarkItem* m_folderToolbar;

View File

@ -256,7 +256,7 @@ void BookmarksToolbar::editBookmark()
return;
}
m_bookmarks->editBookmark(b.id, title, url, b.folder);
//m_bookmarks->editBookmark(b.id, title, url, b.folder);
}
void BookmarksToolbar::removeButton()
@ -272,7 +272,7 @@ void BookmarksToolbar::removeButton()
}
Bookmark bookmark = button->data().value<Bookmark>();
m_bookmarks->removeBookmark(bookmark.id);
//m_bookmarks->removeBookmark(bookmark.id);
}
void BookmarksToolbar::hidePanel()

View File

@ -88,7 +88,7 @@ void BookmarksFoldersMenu::createMenu(QMenu* menu, BookmarkItem* parent)
BookmarksFoldersButton::BookmarksFoldersButton(QWidget* parent, BookmarkItem* folder)
: QPushButton(parent)
, m_menu(new BookmarksFoldersMenu(this))
, m_selectedFolder(folder ? folder : mApp->bookmarks()->getLastFolder())
, m_selectedFolder(folder ? folder : mApp->bookmarks()->lastUsedFolder())
{
init();

View File

@ -16,16 +16,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ============================================================ */
#include "treewidget.h"
#include "bookmarks.h"
#include <QMimeData>
#include <QMouseEvent>
#include <QSqlDatabase>
#include <QApplication>
#include <QUrl>
const int ITEM_IS_TOPLEVEL = Qt::UserRole + 20;
const int ITEM_PARENT_TITLE = Qt::UserRole + 21;
TreeWidget::TreeWidget(QWidget* parent)
: QTreeWidget(parent)
@ -98,224 +90,6 @@ void TreeWidget::iterateAllItems(QTreeWidgetItem* parent)
}
}
void TreeWidget::setMimeType(const QString &mimeType)
{
m_mimeType = mimeType;
}
Qt::DropActions TreeWidget::supportedDropActions() const
{
return Qt::CopyAction;
}
QStringList TreeWidget::mimeTypes() const
{
QStringList types;
types << m_mimeType;
return types;
}
QMimeData* TreeWidget::mimeData(const QList<QTreeWidgetItem*> items) const
{
QMimeData* data = new QMimeData();
QByteArray encodedData;
QDataStream stream(&encodedData, QIODevice::WriteOnly);
foreach (const QTreeWidgetItem* item, items) {
if (!item) {
continue;
}
// Why not just pass pointers ??!!
QTreeWidgetItem* clonedItem = item->clone();
// #1097 Clearing icon will properly write this item into stream ...
clonedItem->setIcon(0, QIcon());
bool parentIsRoot = !item->parent() || item->parent() == invisibleRootItem();
clonedItem->setData(0, ITEM_IS_TOPLEVEL, parentIsRoot);
clonedItem->setData(0, ITEM_PARENT_TITLE, (parentIsRoot ? QString() : item->parent()->text(0))) ;
clonedItem->write(stream);
delete clonedItem;
}
data->setData(m_mimeType, encodedData);
return data;
}
bool TreeWidget::dropMimeData(QTreeWidgetItem* parent, int,
const QMimeData* data, Qt::DropAction action)
{
if (action == Qt::IgnoreAction) {
return true;
}
if (parent && !parent->text(1).isEmpty()) { // parent is a bookmark, go one level up!
parent = parent->parent();
}
if (!parent) {
parent = invisibleRootItem();
}
bool ok = false;
if (data->hasUrls()) {
QString folder = (parent == invisibleRootItem()) ? QLatin1String("unsorted") : parent->text(0);
QUrl url = data->urls().at(0);
QString title = data->text().isEmpty() ? url.host() + url.path() : data->text();
emit linkWasDroped(url, title, data->imageData(), folder, &ok);
return ok;
}
if (!data->hasFormat(m_mimeType)) {
return false;
}
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
QByteArray ba = data->data(m_mimeType);
QDataStream stream(&ba, QIODevice::ReadOnly);
if (stream.atEnd()) {
return false;
}
QSqlDatabase db = QSqlDatabase::database();
db.transaction();
setUpdatesEnabled(false);
while (!stream.atEnd()) {
QTreeWidgetItem* item = new QTreeWidgetItem;
item->read(stream);
bool parentIsRoot = item->data(0, ITEM_IS_TOPLEVEL).toBool();
QString oldParentTitle = item->data(0, ITEM_PARENT_TITLE).toString();
bool isFolder = item->text(1).isEmpty();
if (isFolder && (item->text(0) == _bookmarksMenu ||
item->text(0) == _bookmarksToolbar)) {
continue;
}
bool parentIsOldParent = parentIsRoot ? (parent == invisibleRootItem()) : (oldParentTitle == parent->text(0));
if (parentIsOldParent || (isFolder && parent != invisibleRootItem() &&
parent->text(0) != _bookmarksToolbar)) {
// just 'Bookmarks In ToolBar' folder can have subfolders
continue;
}
if (isFolder) {
emit folderParentChanged(item->text(0), parent->text(0) == _bookmarksToolbar, &ok);
}
else {
emit bookmarkParentChanged(item->data(0, Qt::UserRole + 10).toInt(),
parent->text(0), oldParentTitle, &ok);
}
if (!ok) {
continue;
}
}
db.commit();
clearSelection();
setUpdatesEnabled(true);
QApplication::restoreOverrideCursor();
return true;
}
void TreeWidget::dragEnterEvent(QDragEnterEvent* event)
{
const QMimeData* mimeData = event->mimeData();
QTreeWidget::dragEnterEvent(event);
if (mimeData->hasUrls() || mimeData->hasFormat(m_mimeType)) {
event->acceptProposedAction();
}
else {
event->ignore();
}
}
void TreeWidget::dragMoveEvent(QDragMoveEvent* event)
{
const QMimeData* mimeData = event->mimeData();
bool accept = false;
if (mimeData->hasUrls()) {
accept = true;
}
else if (mimeData->hasFormat(m_mimeType)) {
QTreeWidgetItem* itemUnderMouse = itemAt(event->pos());
if (!itemUnderMouse) {
return;
}
bool underMouseIsFolder = (itemUnderMouse && itemUnderMouse->text(1).isEmpty());
int top = visualItemRect(itemUnderMouse).top();
int bottom = visualItemRect(itemUnderMouse).bottom();
int y = event->pos().y();
bool overEdgeOfItem = (y >= top - 1 && y <= top + 1) || (y <= bottom + 1 && y >= bottom - 1);
QByteArray ba = mimeData->data(m_mimeType);
QDataStream stream(&ba, QIODevice::ReadOnly);
while (!stream.atEnd()) {
QTreeWidgetItem* dragItem = new QTreeWidgetItem;
dragItem->read(stream);
bool parentIsRoot = dragItem->data(0, ITEM_IS_TOPLEVEL).toBool();
QString oldParentTitle = dragItem->data(0, ITEM_PARENT_TITLE).toString();
bool itemIsFolder = dragItem->text(1).isEmpty();
if (dragItem->text(0) != _bookmarksMenu
&& dragItem->text(0) != _bookmarksToolbar) {
if (!itemUnderMouse->parent() && !parentIsRoot && overEdgeOfItem) {
accept = true;
break;
}
bool parentsAreDifferent = parentIsRoot
? itemUnderMouse->parent() != 0
: (!itemUnderMouse->parent() || itemUnderMouse->parent()->text(0) != oldParentTitle);
bool canHasSubFolder = !itemUnderMouse->parent()
|| itemUnderMouse->parent() == invisibleRootItem()
|| itemUnderMouse->parent()->text(0) == _bookmarksToolbar;
if (!underMouseIsFolder && parentsAreDifferent) {
if (!itemIsFolder) {
accept = true;
break;
}
else if (!itemUnderMouse->parent()
|| (dragItem->text(0) != itemUnderMouse->parent()->text(0)
&& canHasSubFolder)) {
accept = true;
break;
}
}
else if (underMouseIsFolder) {
if (itemIsFolder && itemUnderMouse->text(0) == _bookmarksToolbar
&& (parentIsRoot || oldParentTitle != _bookmarksToolbar)) {
accept = true;
break;
}
else if (!itemIsFolder && oldParentTitle != itemUnderMouse->text(0)) {
accept = true;
break;
}
}
}
}
}
QTreeWidget::dragMoveEvent(event);
if (accept) {
event->acceptProposedAction();
}
else {
event->ignore();
}
}
QList<QTreeWidgetItem*> TreeWidget::allItems()
{
if (m_refreshAllItemsNeeded) {
@ -437,27 +211,3 @@ void TreeWidget::deleteItems(const QList<QTreeWidgetItem*> &items)
qDeleteAll(items);
}
void TreeWidget::setDragDropReceiver(bool enable, QObject* receiver)
{
if (!receiver) {
enable = false;
}
setDragEnabled(enable);
viewport()->setAcceptDrops(enable);
setDropIndicatorShown(enable);
if (enable) {
// TODO: It won't probably work in Qt5
#if QT_VERSION < 0x050000
model()->setSupportedDragActions(Qt::CopyAction);
#endif
connect(this, SIGNAL(folderParentChanged(QString,bool,bool*)), receiver, SLOT(changeFolderParent(QString,bool,bool*)));
connect(this, SIGNAL(bookmarkParentChanged(int,QString,QString,bool*)), receiver, SLOT(changeBookmarkParent(int,QString,QString,bool*)));
connect(this, SIGNAL(linkWasDroped(QUrl,QString,QVariant,QString,bool*)), receiver, SLOT(bookmarkDropedLink(QUrl,QString,QVariant,QString,bool*)));
}
else {
disconnect(this, SIGNAL(folderParentChanged(QString,bool,bool*)), receiver, SLOT(changeFolderParent(QString,bool,bool*)));
disconnect(this, SIGNAL(bookmarkParentChanged(int,QString,QString,bool*)), receiver, SLOT(changeBookmarkParent(int,QString,QString,bool*)));
disconnect(this, SIGNAL(linkWasDroped(QUrl,QString,QVariant,QString,bool*)), receiver, SLOT(bookmarkDropedLink(QUrl,QString,QVariant,QString,bool*)));
}
}

View File

@ -45,17 +45,10 @@ public:
void deleteItem(QTreeWidgetItem* item);
void deleteItems(const QList<QTreeWidgetItem*> &items);
void setDragDropReceiver(bool enable, QObject* receiver = 0);
void setMimeType(const QString &mimeType);
signals:
void itemControlClicked(QTreeWidgetItem* item);
void itemMiddleButtonClicked(QTreeWidgetItem* item);
void linkWasDroped(const QUrl &url, const QString &title, const QVariant &imageVariant, const QString &folder, bool* ok);
void bookmarkParentChanged(int id, const QString &newParent, const QString &oldParent, bool* ok);
void folderParentChanged(const QString &name, bool isSubfolder, bool* ok);
public slots:
void filterString(const QString &string);
void clear();
@ -67,17 +60,9 @@ private:
void mousePressEvent(QMouseEvent* event);
void iterateAllItems(QTreeWidgetItem* parent);
Qt::DropActions supportedDropActions() const;
QStringList mimeTypes() const;
QMimeData* mimeData(const QList<QTreeWidgetItem*> items) const;
bool dropMimeData(QTreeWidgetItem* parent, int, const QMimeData* data, Qt::DropAction action);
void dragEnterEvent(QDragEnterEvent* event);
void dragMoveEvent(QDragMoveEvent* event);
bool m_refreshAllItemsNeeded;
QList<QTreeWidgetItem*> m_allTreeItems;
ItemShowMode m_showMode;
QString m_mimeType;
};
#endif // BOOKMARKSTREEWIDGET_H