/***************************************************************************
- * Copyright (C) 2006 by Peter Penz (peter.penz@gmx.at) *
+ * Copyright (C) 2006 by Peter Penz (<peter.penz@gmx.at>) *
* Copyright (C) 2006 by Aaron J. Seigo (<aseigo@kde.org>) *
* Copyright (C) 2006 by Patrice Tremblay *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include "urlnavigator.h"
+#include "bookmarkselector.h"
+#include "dolphinsettings.h"
+#include "dolphin_generalsettings.h"
+#include "protocolcombo.h"
+#include "urlnavigatorbutton.h"
+
#include <assert.h>
-#include <qcombobox.h>
-#include <qfont.h>
-#include <qlabel.h>
-#include <q3listbox.h>
-#include <qlineedit.h>
-#include <qobject.h>
-#include <q3popupmenu.h>
-#include <qpushbutton.h>
-#include <qsizepolicy.h>
-#include <qtooltip.h>
-//Added by qt3to4:
-#include <Q3ValueList>
-#include <QKeyEvent>
-#include <QCheckBox>
-
-#include <kaction.h>
-#include <kactioncollection.h>
-#include <kiconloader.h>
-#include <kio/job.h>
+#include <kfileitem.h>
+#include <kicon.h>
#include <klocale.h>
#include <kprotocolinfo.h>
-#include <kurl.h>
#include <kurlcombobox.h>
#include <kurlcompletion.h>
-#include <kbookmarkmanager.h>
-#include "bookmarkselector.h"
-#include "dolphin.h"
-#include "dolphinsettings.h"
-#include "dolphinstatusbar.h"
-#include "dolphinview.h"
-#include "generalsettings.h"
-#include "protocolcombo.h"
-#include "urlnavigatorbutton.h"
-
-URLNavigator::HistoryElem::HistoryElem()
- : m_url(),
+#include <QApplication>
+#include <QClipboard>
+#include <QDir>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QMouseEvent>
+#include <QToolButton>
+
+UrlNavigator::HistoryElem::HistoryElem() :
+ m_url(),
m_currentFileName(),
m_contentsX(0),
m_contentsY(0)
{
}
-URLNavigator::HistoryElem::HistoryElem(const KUrl& url)
- : m_url(url),
+UrlNavigator::HistoryElem::HistoryElem(const KUrl& url) :
+ m_url(url),
m_currentFileName(),
m_contentsX(0),
m_contentsY(0)
{
}
-URLNavigator::HistoryElem::~HistoryElem()
+UrlNavigator::HistoryElem::~HistoryElem()
{
}
-URLNavigator::URLNavigator(const KUrl& url,
- DolphinView* dolphinView) :
- Q3HBox(dolphinView),
+UrlNavigator::UrlNavigator(const KUrl& url,
+ QWidget* parent) :
+ QWidget(parent),
+ m_active(true),
+ m_showHiddenFiles(false),
m_historyIndex(0),
- m_dolphinView(dolphinView),
+ m_layout(0),
m_protocols(0),
m_protocolSeparator(0),
- m_host(0)
+ m_host(0),
+ m_filler(0)
{
+ m_layout = new QHBoxLayout();
+ m_layout->setSpacing(0);
+ m_layout->setMargin(0);
+
m_history.prepend(HistoryElem(url));
QFontMetrics fontMetrics(font());
- setMinimumHeight(fontMetrics.height() + 8);
-
- m_toggleButton = new QCheckBox(this);
- //m_toggleButton->setFlat(true);
- //m_toggleButton->setToggleButton(true);
+ setMinimumHeight(fontMetrics.height() + 10);
+
+ // intialize toggle button which switches between the breadcrumb view
+ // and the traditional view
+ m_toggleButton = new QToolButton();
+ m_toggleButton->setCheckable(true);
+ m_toggleButton->setAutoRaise(true);
+ m_toggleButton->setIcon(KIcon("editinput")); // TODO: is just a placeholder icon (?)
m_toggleButton->setFocusPolicy(Qt::NoFocus);
m_toggleButton->setMinimumHeight(minimumHeight());
connect(m_toggleButton, SIGNAL(clicked()),
- this, SLOT(slotClicked()));
- if (DolphinSettings::instance().generalSettings()->editableURL()) {
+ this, SLOT(switchView()));
+ if (DolphinSettings::instance().generalSettings()->editableUrl()) {
m_toggleButton->toggle();
}
+ // initialize the bookmark selector
m_bookmarkSelector = new BookmarkSelector(this);
- connect(m_bookmarkSelector, SIGNAL(bookmarkActivated(int)),
- this, SLOT(slotBookmarkActivated(int)));
+ connect(m_bookmarkSelector, SIGNAL(bookmarkActivated(const KUrl&)),
+ this, SLOT(setUrl(const KUrl&)));
+ // initialize the path box of the traditional view
m_pathBox = new KUrlComboBox(KUrlComboBox::Directories, true, this);
KUrlCompletion* kurlCompletion = new KUrlCompletion(KUrlCompletion::DirCompletion);
connect(m_pathBox, SIGNAL(returnPressed(const QString&)),
this, SLOT(slotReturnPressed(const QString&)));
connect(m_pathBox, SIGNAL(urlActivated(const KUrl&)),
- this, SLOT(slotURLActivated(const KUrl&)));
-
- connect(dolphinView, SIGNAL(contentsMoved(int, int)),
- this, SLOT(slotContentsMoved(int, int)));
- connect(dolphinView, SIGNAL(redirection(const KUrl&, const KUrl&)),
- this, SLOT(slotRedirection(const KUrl&, const KUrl&)));
-/* connect(dolphinView, SIGNAL(redirection(const KUrl&)),
- this, SLOT(slotRedirection(const KUrl&)));*/
- updateContent();
-}
+ this, SLOT(slotUrlActivated(const KUrl&)));
-URLNavigator::~URLNavigator()
-{
-}
+ //connect(dolphinView, SIGNAL(redirection(const KUrl&, const KUrl&)),
+ // this, SLOT(slotRedirection(const KUrl&, const KUrl&)));
-void URLNavigator::setURL(const KUrl& url)
-{
- QString urlStr(url.pathOrUrl());
- //kdDebug() << "setURL(" << url << ")" << endl;
- if (urlStr.at(0) == '~') {
- // replace '~' by the home directory
- urlStr.remove(0, 1);
- urlStr.insert(0, QDir::home().path());
- }
-
- const KUrl transformedURL(urlStr);
-
- if (m_historyIndex > 0) {
- // Check whether the previous element of the history has the same URL.
- // If yes, just go forward instead of inserting a duplicate history
- // element.
- const KUrl& nextURL = m_history[m_historyIndex - 1].url();
- if (transformedURL == nextURL) {
- goForward();
-// kdDebug() << "goin' forward in history" << endl;
- return;
- }
- }
+ // Append a filler widget at the end, which automatically resizes to the
+ // maximum available width. This assures that the URL navigator uses the
+ // whole width, so that the clipboard content can be dropped.
+ m_filler = new QWidget();
+ m_filler->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
- const KUrl& currURL = m_history[m_historyIndex].url();
- if (currURL == transformedURL) {
- // don't insert duplicate history elements
-// kdDebug() << "currURL == transformedURL" << endl;
- return;
- }
-
- updateHistoryElem();
-
- const Q3ValueListIterator<URLNavigator::HistoryElem> it = m_history.at(m_historyIndex);
- m_history.insert(it, HistoryElem(transformedURL));
+ m_layout->addWidget(m_toggleButton);
+ m_layout->addWidget(m_bookmarkSelector);
+ m_layout->addWidget(m_pathBox);
+ m_layout->addWidget(m_filler);
+ setLayout(m_layout);
updateContent();
+}
- emit urlChanged(transformedURL);
- emit historyChanged();
-
- // Prevent an endless growing of the history: remembering
- // the last 100 URLs should be enough...
- if (m_historyIndex > 100) {
- m_history.erase(m_history.begin());
- --m_historyIndex;
- }
-
-/* kdDebug() << "history starting ====================" << endl;
- int i = 0;
- for (QValueListIterator<URLNavigator::HistoryElem> it = m_history.begin();
- it != m_history.end();
- ++it, ++i)
- {
- kdDebug() << i << ": " << (*it).url() << endl;
- }
- kdDebug() << "history done ========================" << endl;*/
+UrlNavigator::~UrlNavigator()
+{
}
-const KUrl& URLNavigator::url() const
+const KUrl& UrlNavigator::url() const
{
assert(!m_history.empty());
- return m_history[m_historyIndex].url();
+ QLinkedList<HistoryElem>::const_iterator it = m_history.begin();
+ it += m_historyIndex;
+ return (*it).url();
}
-KUrl URLNavigator::url(int index) const
+KUrl UrlNavigator::url(int index) const
{
assert(index >= 0);
QString path(url().pathOrUrl());
path = path.section('/', 0, index);
- if (path.at(path.length()) != '/')
+ if ( path.length() >= 1 && path.at(path.length()-1) != '/')
{
path.append('/');
}
return path;
}
-const Q3ValueList<URLNavigator::HistoryElem>& URLNavigator::history(int& index) const
+const QLinkedList<UrlNavigator::HistoryElem>& UrlNavigator::history(int& index) const
{
index = m_historyIndex;
return m_history;
}
-void URLNavigator::goBack()
+void UrlNavigator::goBack()
{
updateHistoryElem();
}
}
-void URLNavigator::goForward()
+void UrlNavigator::goForward()
{
if (m_historyIndex > 0) {
--m_historyIndex;
}
}
-void URLNavigator::goUp()
+void UrlNavigator::goUp()
{
- setURL(url().upUrl());
+ setUrl(url().upUrl());
}
-void URLNavigator::goHome()
+void UrlNavigator::goHome()
{
- setURL(DolphinSettings::instance().generalSettings()->homeURL());
+ setUrl(DolphinSettings::instance().generalSettings()->homeUrl());
}
-void URLNavigator::setURLEditable(bool editable)
+void UrlNavigator::setUrlEditable(bool editable)
{
- if (isURLEditable() != editable) {
+ if (isUrlEditable() != editable) {
m_toggleButton->toggle();
- slotClicked();
+ switchView();
}
}
-bool URLNavigator::isURLEditable() const
+bool UrlNavigator::isUrlEditable() const
{
return m_toggleButton->isChecked();
}
-void URLNavigator::editURL(bool editOrBrowse)
+void UrlNavigator::editUrl(bool editOrBrowse)
+{
+ setUrlEditable(editOrBrowse);
+ if (editOrBrowse) {
+ m_pathBox->setFocus();
+ }
+}
+
+void UrlNavigator::setActive(bool active)
+{
+ if (active != m_active) {
+ m_active = active;
+ update();
+ if (active) {
+ emit activated();
+ }
+ }
+}
+
+void UrlNavigator::setShowHiddenFiles( bool show )
+{
+ m_showHiddenFiles = show;
+}
+
+void UrlNavigator::dropUrls(const KUrl::List& urls,
+ const KUrl& destination)
+{
+ emit urlsDropped(urls, destination);
+}
+
+void UrlNavigator::setUrl(const KUrl& url)
{
- setURLEditable(editOrBrowse);
+ QString urlStr(url.pathOrUrl());
+ //kDebug() << "setUrl(" << url << ")" << endl;
+ if ( urlStr.length() > 0 && urlStr.at(0) == '~') {
+ // replace '~' by the home directory
+ urlStr.remove(0, 1);
+ urlStr.insert(0, QDir::home().path());
+ }
+
+ const KUrl transformedUrl(urlStr);
+
+ if (m_historyIndex > 0) {
+ // Check whether the previous element of the history has the same Url.
+ // If yes, just go forward instead of inserting a duplicate history
+ // element.
+ QLinkedList<HistoryElem>::const_iterator it = m_history.begin();
+ it += m_historyIndex - 1;
+ const KUrl& nextUrl = (*it).url();
+ if (transformedUrl == nextUrl) {
+ goForward();
+// kDebug() << "goin' forward in history" << endl;
+ return;
+ }
+ }
+
+ QLinkedList<HistoryElem>::iterator it = m_history.begin() + m_historyIndex;
+ const KUrl& currUrl = (*it).url();
+ if (currUrl == transformedUrl) {
+ // don't insert duplicate history elements
+// kDebug() << "currUrl == transformedUrl" << endl;
+ return;
+ }
+
+ updateHistoryElem();
+ m_history.insert(it, HistoryElem(transformedUrl));
+
+ updateContent();
+
+ emit urlChanged(transformedUrl);
+ emit historyChanged();
- if (editOrBrowse)
+ // Prevent an endless growing of the history: remembering
+ // the last 100 Urls should be enough...
+ if (m_historyIndex > 100) {
+ m_history.erase(m_history.begin());
+ --m_historyIndex;
+ }
+
+/* kDebug() << "history starting ====================" << endl;
+ int i = 0;
+ for (QValueListIterator<UrlNavigator::HistoryElem> it = m_history.begin();
+ it != m_history.end();
+ ++it, ++i)
{
- m_pathBox->setFocus();
+ kDebug() << i << ": " << (*it).url() << endl;
}
+ kDebug() << "history done ========================" << endl;*/
+
+ requestActivation();
+}
+
+void UrlNavigator::requestActivation()
+{
+ setActive(true);
+}
+
+void UrlNavigator::storeContentsPosition(int x, int y)
+{
+ QLinkedList<HistoryElem>::iterator it = m_history.begin() + m_historyIndex;
+ (*it).setContentsX(x);
+ (*it).setContentsY(y);
}
-DolphinView* URLNavigator::dolphinView() const
+void UrlNavigator::keyReleaseEvent(QKeyEvent* event)
{
- return m_dolphinView;
+ QWidget::keyReleaseEvent(event);
+ if (isUrlEditable() && (event->key() == Qt::Key_Escape)) {
+ setUrlEditable(false);
+ }
}
-void URLNavigator::keyReleaseEvent(QKeyEvent* event)
+void UrlNavigator::mouseReleaseEvent(QMouseEvent* event)
{
- Q3HBox::keyReleaseEvent(event);
- if (isURLEditable() && (event->key() == Qt::Key_Escape)) {
- setURLEditable(false);
+ if (event->button() == Qt::MidButton) {
+ QClipboard* clipboard = QApplication::clipboard();
+ const QMimeData* mimeData = clipboard->mimeData();
+ if (mimeData->hasText()) {
+ const QString text = mimeData->text();
+ setUrl(KUrl(text));
+ }
}
+ QWidget::mouseReleaseEvent(event);
}
-void URLNavigator::slotReturnPressed(const QString& text)
+void UrlNavigator::slotReturnPressed(const QString& text)
{
// Parts of the following code have been taken
// from the class KateFileSelector located in
// Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org>
// Copyright (C) 2001 Anders Lund <anders.lund@lund.tdcadsl.dk>
- KUrl typedURL(text);
- if (typedURL.hasPass()) {
- typedURL.setPass(QString::null);
+ KUrl typedUrl(text);
+ if (typedUrl.hasPass()) {
+ typedUrl.setPass(QString());
}
QStringList urls = m_pathBox->urls();
- urls.remove(typedURL.url());
- urls.prepend(typedURL.url());
+ urls.removeAll(typedUrl.url());
+ urls.prepend(typedUrl.url());
m_pathBox->setUrls(urls, KUrlComboBox::RemoveBottom);
- setURL(typedURL);
- // The URL might have been adjusted by URLNavigator::setURL(), hence
+ setUrl(typedUrl);
+ // The URL might have been adjusted by UrlNavigator::setUrl(), hence
// synchronize the result in the path box.
m_pathBox->setUrl(url());
}
-void URLNavigator::slotURLActivated(const KUrl& url)
+void UrlNavigator::slotUrlActivated(const KUrl& url)
{
- setURL(url);
+ setUrl(url);
}
-void URLNavigator::slotRemoteHostActivated()
+void UrlNavigator::slotRemoteHostActivated()
{
KUrl u = url();
QString host = m_host->text();
QString user;
- int marker = host.find("@");
+ int marker = host.indexOf("@");
if (marker != -1)
{
user = host.left(marker);
host = host.right(host.length() - marker - 1);
}
- marker = host.find("/");
+ marker = host.indexOf("/");
if (marker != -1)
{
u.setPath(host.right(host.length() - marker));
}
}
- setURL(u);
+ setUrl(u);
}
}
-void URLNavigator::slotProtocolChanged(const QString& protocol)
+void UrlNavigator::slotProtocolChanged(const QString& protocol)
{
KUrl url;
url.setProtocol(protocol);
//url.setPath(KProtocolInfo::protocolClass(protocol) == ":local" ? "/" : "");
url.setPath("/");
- Q3ValueList<QWidget*>::const_iterator it = m_navButtons.constBegin();
- while (it != m_navButtons.constEnd()) {
+ QLinkedList<UrlNavigatorButton*>::const_iterator it = m_navButtons.begin();
+ const QLinkedList<UrlNavigatorButton*>::const_iterator itEnd = m_navButtons.end();
+ while (it != itEnd) {
(*it)->close();
(*it)->deleteLater();
++it;
m_navButtons.clear();
if (KProtocolInfo::protocolClass(protocol) == ":local") {
- setURL(url);
+ setUrl(url);
}
else {
if (!m_host) {
m_protocolSeparator = new QLabel("://", this);
+ appendWidget(m_protocolSeparator);
m_host = new QLineEdit(this);
+ appendWidget(m_host);
connect(m_host, SIGNAL(lostFocus()),
this, SLOT(slotRemoteHostActivated()));
}
}
-void URLNavigator::slotRequestActivation()
-{
- m_dolphinView->requestActivation();
-}
-
-void URLNavigator::slotBookmarkActivated(int index)
-{
- m_dolphinView->statusBar()->clear();
- m_dolphinView->requestActivation();
-
- KBookmark bookmark = DolphinSettings::instance().bookmark(index);
- m_dolphinView->setURL(bookmark.url());
-}
-
-void URLNavigator::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl)
+void UrlNavigator::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl)
{
-// kdDebug() << "received redirection to " << newUrl << endl;
-kdDebug() << "received redirection from " << oldUrl << " to " << newUrl << endl;
+// kDebug() << "received redirection to " << newUrl << endl;
+kDebug() << "received redirection from " << oldUrl << " to " << newUrl << endl;
/* UrlStack::iterator it = m_urls.find(oldUrl);
if (it != m_urls.end())
{
m_urls.append(newUrl);*/
}
-void URLNavigator::slotContentsMoved(int x, int y)
+void UrlNavigator::switchView()
{
- m_history[m_historyIndex].setContentsX(x);
- m_history[m_historyIndex].setContentsY(y);
-}
-
-void URLNavigator::slotClicked()
-{
- if (isURLEditable()) {
+ updateContent();
+ if (isUrlEditable()) {
m_pathBox->setFocus();
- updateContent();
}
else {
- setURL(m_pathBox->currentText());
- m_dolphinView->setFocus();
+ setUrl(m_pathBox->currentText());
}
+ emit requestActivation();
}
-void URLNavigator::updateHistoryElem()
+void UrlNavigator::updateHistoryElem()
{
assert(m_historyIndex >= 0);
- const KFileItem* item = m_dolphinView->currentFileItem();
+ const KFileItem* item = 0; // TODO: m_dolphinView->currentFileItem();
if (item != 0) {
- m_history[m_historyIndex].setCurrentFileName(item->name());
+ QLinkedList<HistoryElem>::iterator it = m_history.begin() + m_historyIndex;
+ (*it).setCurrentFileName(item->name());
}
- m_history[m_historyIndex].setContentsX(m_dolphinView->contentsX());
- m_history[m_historyIndex].setContentsY(m_dolphinView->contentsY());
}
-void URLNavigator::updateContent()
+void UrlNavigator::updateContent()
{
- // delete all existing URL navigator buttons
- Q3ValueList<QWidget*>::const_iterator it = m_navButtons.constBegin();
- while (it != m_navButtons.constEnd()) {
- (*it)->close();
- (*it)->deleteLater();
- ++it;
- }
- m_navButtons.clear();
-
m_bookmarkSelector->updateSelection(url());
- QToolTip::remove(m_toggleButton);
+ m_toggleButton->setToolTip(QString());
QString path(url().pathOrUrl());
- const KAction* action = Dolphin::mainWin().actionCollection()->action("editable_location");
+
+ // TODO: prevent accessing the DolphinMainWindow out from this scope
+ //const QAction* action = dolphinView()->mainWindow()->actionCollection()->action("editable_location");
// TODO: registry of default shortcuts
- QString shortcut = action? action->shortcutText() : "Ctrl+L";
+ //QString shortcut = action? action->shortcut().toString() : "Ctrl+L";
+ const QString shortcut = "Ctrl+L";
+
if (m_toggleButton->isChecked()) {
delete m_protocols; m_protocols = 0;
delete m_protocolSeparator; m_protocolSeparator = 0;
delete m_host; m_host = 0;
+ deleteButtons();
+ m_filler->hide();
- QToolTip::add(m_toggleButton, i18n("Browse (%1, Escape)").arg(shortcut));
+ m_toggleButton->setToolTip(i18n("Browse (%1, Escape)", shortcut));
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
m_pathBox->show();
m_pathBox->setUrl(url());
}
else {
- QToolTip::add(m_toggleButton, i18n("Edit location (%1)").arg(shortcut));
+ m_toggleButton->setToolTip(i18n("Edit location (%1)", shortcut));
- setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
m_pathBox->hide();
- QString dir_name;
+ m_filler->show();
// get the data from the currently selected bookmark
KBookmark bookmark = m_bookmarkSelector->selectedBookmark();
QString bookmarkPath;
if (bookmark.isNull()) {
- // No bookmark is a part of the current URL.
+ // No bookmark is a part of the current Url.
// The following code tries to guess the bookmark
// path. E. g. "fish://root@192.168.0.2/var/lib" writes
// "fish://root@192.168.0.2" to 'bookmarkPath', which leads to the
// navigation indication 'Custom Path > var > lib".
- int idx = path.find(QString("//"));
- idx = path.find("/", (idx < 0) ? 0 : idx + 2);
+ int idx = path.indexOf(QString("//"));
+ idx = path.indexOf("/", (idx < 0) ? 0 : idx + 2);
bookmarkPath = (idx < 0) ? path : path.left(idx);
}
else {
if (!url().isLocalFile() && bookmark.isNull()) {
QString protocol = url().protocol();
if (!m_protocols) {
+ deleteButtons();
m_protocols = new ProtocolCombo(protocol, this);
+ appendWidget(m_protocols);
connect(m_protocols, SIGNAL(activated(const QString&)),
this, SLOT(slotProtocolChanged(const QString&)));
}
}
m_protocols->show();
- if (KProtocolInfo::protocolClass(protocol) != ":local")
- {
+ if (KProtocolInfo::protocolClass(protocol) != ":local") {
QString hostText = url().host();
- if (!url().user().isEmpty())
- {
- hostText = url().user() + "@" + hostText;
+ if (!url().user().isEmpty()) {
+ hostText = url().user() + '@' + hostText;
}
if (!m_host) {
m_protocolSeparator = new QLabel("://", this);
+ appendWidget(m_protocolSeparator);
m_host = new QLineEdit(hostText, this);
+ appendWidget(m_host);
connect(m_host, SIGNAL(lostFocus()),
this, SLOT(slotRemoteHostActivated()));
}
}
- // create URL navigator buttons
- int idx = slashCount;
- bool hasNext = true;
- do {
- dir_name = path.section('/', idx, idx);
- const bool isFirstButton = (idx == slashCount);
- hasNext = isFirstButton || !dir_name.isEmpty();
- if (hasNext) {
- URLNavigatorButton* button = new URLNavigatorButton(idx, this);
- if (isFirstButton) {
- // the first URL navigator button should get the name of the
- // bookmark instead of the directory name
- QString text = bookmark.text();
- if (text.isEmpty()) {
- if (url().isLocalFile())
- {
- text = i18n("Custom Path");
- }
- else
- {
- delete button;
- ++idx;
- continue;
- }
+ updateButtons(path, slashCount);
+ }
+}
+
+void UrlNavigator::updateButtons(const QString& path, int startIndex)
+{
+ QLinkedList<UrlNavigatorButton*>::iterator it = m_navButtons.begin();
+ const QLinkedList<UrlNavigatorButton*>::const_iterator itEnd = m_navButtons.end();
+ bool createButton = false;
+
+ int idx = startIndex;
+ bool hasNext = true;
+ do {
+ createButton = (it == itEnd);
+
+ const QString dirName = path.section('/', idx, idx);
+ const bool isFirstButton = (idx == startIndex);
+ hasNext = isFirstButton || !dirName.isEmpty();
+ if (hasNext) {
+ QString text;
+ if (isFirstButton) {
+ // the first URL navigator button should get the name of the
+ // bookmark instead of the directory name
+ const KBookmark bookmark = m_bookmarkSelector->selectedBookmark();
+ text = bookmark.text();
+ if (text.isEmpty()) {
+ if (url().isLocalFile()) {
+ text = i18n("Custom Path");
+ }
+ else {
+ ++idx;
+ continue;
}
- button->setText(text);
}
+ }
+
+ UrlNavigatorButton* button = 0;
+ if (createButton) {
+ button = new UrlNavigatorButton(idx, this);
+ appendWidget(button);
+ }
+ else {
+ button = *it;
+ button->setIndex(idx);
+ }
+
+ if (isFirstButton) {
+ button->setText(text);
+ }
+
+ if (createButton) {
button->show();
m_navButtons.append(button);
- ++idx;
}
- } while (hasNext);
+ else {
+ ++it;
+ }
+ ++idx;
+ }
+ } while (hasNext);
+
+ // delete buttons which are not used anymore
+ QLinkedList<UrlNavigatorButton*>::iterator itBegin = it;
+ while (it != itEnd) {
+ (*it)->close();
+ (*it)->deleteLater();
+ ++it;
}
+ m_navButtons.erase(itBegin, m_navButtons.end());
+}
+
+void UrlNavigator::deleteButtons()
+{
+ QLinkedList<UrlNavigatorButton*>::iterator itBegin = m_navButtons.begin();
+ QLinkedList<UrlNavigatorButton*>::iterator itEnd = m_navButtons.end();
+ QLinkedList<UrlNavigatorButton*>::iterator it = itBegin;
+ while (it != itEnd) {
+ (*it)->close();
+ (*it)->deleteLater();
+ ++it;
+ }
+ m_navButtons.erase(itBegin, itEnd);
+}
+
+void UrlNavigator::appendWidget(QWidget* widget)
+{
+ m_layout->insertWidget(m_layout->count() - 1, widget);
}
#include "urlnavigator.moc"