diff --git a/krusader/BookMan/krbookmark.h b/krusader/BookMan/krbookmark.h --- a/krusader/BookMan/krbookmark.h +++ b/krusader/BookMan/krbookmark.h @@ -36,14 +36,19 @@ { Q_OBJECT public: - KrBookmark(QString name, QUrl url, KActionCollection *parent, QString icon = "", QString actionName = QString()); + KrBookmark(QString name, QUrl url, KActionCollection *parent, QString iconName = "", QString actionName = QString()); explicit KrBookmark(QString name, QString iconName = ""); // creates a folder ~KrBookmark(); + // text() and setText() to change the name of the bookmark // icon() and setIcon() to change icons + + void setIconName(QString iconName); + inline const QString& iconName() const { return _iconName; } + inline const QUrl &url() const { return _url; } diff --git a/krusader/BookMan/krbookmark.cpp b/krusader/BookMan/krbookmark.cpp --- a/krusader/BookMan/krbookmark.cpp +++ b/krusader/BookMan/krbookmark.cpp @@ -43,19 +43,7 @@ parent->addAction(actName, this); connect(this, SIGNAL(triggered()), this, SLOT(activatedProxy())); - // do we have an icon? - if (!iconName.isEmpty()) - setIcon(Icon(iconName)); - else { - // what kind of a url is it? - if (_url.isLocalFile()) { - setIcon(Icon("folder")); - } else { // is it an archive? - if (KRarcHandler::isArchive(_url)) - setIcon(Icon("application-x-tar")); - else setIcon(Icon("folder-html")); - } - } + setIconName(iconName); } KrBookmark::KrBookmark(QString name, QString iconName) : @@ -74,6 +62,19 @@ } } +void KrBookmark::setIconName(QString iconName) +{ + if (!iconName.isEmpty()) { + setIcon(Icon(iconName)); + } else if (_url.isLocalFile()) { + setIcon(Icon("folder")); + } else if (KRarcHandler::isArchive(_url)) { + setIcon(Icon("application-x-tar")); + } else { + setIcon(Icon("folder-html")); + } +} + KrBookmark * KrBookmark::getExistingBookmark(QString actionName, KActionCollection *collection) { return static_cast(collection->action(BM_NAME(actionName))); diff --git a/krusader/BookMan/krbookmarkhandler.h b/krusader/BookMan/krbookmarkhandler.h --- a/krusader/BookMan/krbookmarkhandler.h +++ b/krusader/BookMan/krbookmarkhandler.h @@ -61,7 +61,7 @@ void exportToFile(); void exportToFileFolder(QDomDocument &doc, QDomElement &parent, KrBookmark *folder); void exportToFileBookmark(QDomDocument &doc, QDomElement &where, KrBookmark *bm); - void clearBookmarks(KrBookmark *root); + void clearBookmarks(KrBookmark *root, bool removeBookmarks = true); void buildMenu(KrBookmark *parent, QMenu *menu, int depth = 0); bool eventFilter(QObject *obj, QEvent *ev); diff --git a/krusader/BookMan/krbookmarkhandler.cpp b/krusader/BookMan/krbookmarkhandler.cpp --- a/krusader/BookMan/krbookmarkhandler.cpp +++ b/krusader/BookMan/krbookmarkhandler.cpp @@ -232,7 +232,7 @@ bool KrBookmarkHandler::importFromFileBookmark(QDomElement &e, KrBookmark *parent, QString path, QString *errorMsg) { - QString url, name, icon; + QString url, name, iconName; // verify tag if (e.tagName() != "bookmark") { *errorMsg = i18n("%1 instead of %2", e.tagName(), QLatin1String("bookmark")); @@ -251,14 +251,17 @@ } else name = te.text(); // do we have an icon? if (e.hasAttribute("icon")) { - icon = e.attribute("icon"); + iconName = e.attribute("icon"); } // ok: got name and url, let's add a bookmark KrBookmark *bm = KrBookmark::getExistingBookmark(path + name, _collection); if (!bm) { - bm = new KrBookmark(name, QUrl(url), _collection, icon, path + name); - parent->children().append(bm); + bm = new KrBookmark(name, QUrl(url), _collection, iconName, path + name); + } else { + bm->setURL(QUrl(url)); + bm->setIconName(iconName); } + parent->children().append(bm); return true; } @@ -298,7 +301,7 @@ void KrBookmarkHandler::importFromFile() { - clearBookmarks(_root); + clearBookmarks(_root, false); QString filename = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1Char('/') + BOOKMARKS_FILE; QFile file(filename); @@ -522,21 +525,22 @@ menu->installEventFilter(this); } -void KrBookmarkHandler::clearBookmarks(KrBookmark *root) +void KrBookmarkHandler::clearBookmarks(KrBookmark *root, bool removeBookmarks) { - QList::iterator it = root->children().begin(); - while (it != root->children().end()) { + for (auto it = root->children().begin(); it != root->children().end(); it = root->children().erase(it)) { KrBookmark *bm = *it; - if (bm->isFolder()) - clearBookmarks(bm); - else { - foreach(QWidget *w, bm->associatedWidgets()) - w->removeAction(bm); + if (bm->isFolder()) { + clearBookmarks(bm, removeBookmarks); + delete bm; + } else if (bm->isSeparator()) { + delete bm; + } else if (removeBookmarks) { + foreach (QWidget *w, bm->associatedWidgets()) { + w->removeAction(bm); + } delete bm; } - - it = root->children().erase(it); } }