X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/175fe7ff47ccff39b0e77f80491a9701d025375e..e11f9af6056d8e9d4affbcb142b67449b670c9cd:/src/urlnavigator.cpp diff --git a/src/urlnavigator.cpp b/src/urlnavigator.cpp index 93de43e67..70cae4708 100644 --- a/src/urlnavigator.cpp +++ b/src/urlnavigator.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Peter Penz (peter.penz@gmx.at) * + * Copyright (C) 2006 by Peter Penz () * * Copyright (C) 2006 by Aaron J. Seigo () * * Copyright (C) 2006 by Patrice Tremblay * * * @@ -21,42 +21,24 @@ #include "urlnavigator.h" -#include +#include "bookmarkselector.h" +#include "dolphinsettings.h" +#include "generalsettings.h" +#include "protocolcombo.h" +#include "urlnavigatorbutton.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//Added by qt3to4: -#include -#include -#include -#include +#include -#include -#include -#include -#include #include #include #include -#include #include #include -#include -#include -#include "bookmarkselector.h" -#include "dolphinsettings.h" -#include "generalsettings.h" -#include "protocolcombo.h" -#include "urlnavigatorbutton.h" +#include +#include +#include +#include UrlNavigator::HistoryElem::HistoryElem() : m_url(), @@ -130,7 +112,9 @@ UrlNavigator::~UrlNavigator() const KUrl& UrlNavigator::url() const { assert(!m_history.empty()); - return m_history[m_historyIndex].url(); + QLinkedList::const_iterator it = m_history.begin(); + it += m_historyIndex; + return (*it).url(); } KUrl UrlNavigator::url(int index) const @@ -147,7 +131,7 @@ KUrl UrlNavigator::url(int index) const return path; } -const Q3ValueList& UrlNavigator::history(int& index) const +const QLinkedList& UrlNavigator::history(int& index) const { index = m_historyIndex; return m_history; @@ -202,9 +186,7 @@ bool UrlNavigator::isUrlEditable() const void UrlNavigator::editUrl(bool editOrBrowse) { setUrlEditable(editOrBrowse); - - if (editOrBrowse) - { + if (editOrBrowse) { m_pathBox->setFocus(); } } @@ -223,7 +205,6 @@ void UrlNavigator::setActive(bool active) void UrlNavigator::dropUrls(const KUrl::List& urls, const KUrl& destination) { - kDebug() << "------------------- URLS dropped" << endl; emit urlsDropped(urls, destination); } @@ -243,7 +224,9 @@ void UrlNavigator::setUrl(const KUrl& url) // 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(); + QLinkedList::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; @@ -251,7 +234,8 @@ void UrlNavigator::setUrl(const KUrl& url) } } - const KUrl& currUrl = m_history[m_historyIndex].url(); + QLinkedList::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; @@ -259,8 +243,6 @@ void UrlNavigator::setUrl(const KUrl& url) } updateHistoryElem(); - - const Q3ValueListIterator it = m_history.at(m_historyIndex); m_history.insert(it, HistoryElem(transformedUrl)); updateContent(); @@ -296,8 +278,9 @@ void UrlNavigator::requestActivation() void UrlNavigator::storeContentsPosition(int x, int y) { - m_history[m_historyIndex].setContentsX(x); - m_history[m_historyIndex].setContentsY(y); + QLinkedList::iterator it = m_history.begin() + m_historyIndex; + (*it).setContentsX(x); + (*it).setContentsY(y); } void UrlNavigator::keyReleaseEvent(QKeyEvent* event) @@ -328,7 +311,7 @@ void UrlNavigator::slotReturnPressed(const QString& text) m_pathBox->setUrls(urls, KUrlComboBox::RemoveBottom); setUrl(typedUrl); - // The Url might have been adjusted by UrlNavigator::setUrl(), hence + // The URL might have been adjusted by UrlNavigator::setUrl(), hence // synchronize the result in the path box. m_pathBox->setUrl(url()); } @@ -391,8 +374,9 @@ void UrlNavigator::slotProtocolChanged(const QString& protocol) url.setProtocol(protocol); //url.setPath(KProtocolInfo::protocolClass(protocol) == ":local" ? "/" : ""); url.setPath("/"); - Q3ValueList::const_iterator it = m_navButtons.constBegin(); - while (it != m_navButtons.constEnd()) { + QLinkedList::const_iterator it = m_navButtons.begin(); + const QLinkedList::const_iterator itEnd = m_navButtons.end(); + while (it != itEnd) { (*it)->close(); (*it)->deleteLater(); ++it; @@ -451,21 +435,13 @@ void UrlNavigator::updateHistoryElem() assert(m_historyIndex >= 0); const KFileItem* item = 0; // TODO: m_dolphinView->currentFileItem(); if (item != 0) { - m_history[m_historyIndex].setCurrentFileName(item->name()); + QLinkedList::iterator it = m_history.begin() + m_historyIndex; + (*it).setCurrentFileName(item->name()); } } void UrlNavigator::updateContent() { - // delete all existing Url navigator buttons - Q3ValueList::const_iterator it = m_navButtons.constBegin(); - while (it != m_navButtons.constEnd()) { - (*it)->close(); - (*it)->deleteLater(); - ++it; - } - m_navButtons.clear(); - m_bookmarkSelector->updateSelection(url()); m_toggleButton->setToolTip(QString()); @@ -481,6 +457,7 @@ void UrlNavigator::updateContent() delete m_protocols; m_protocols = 0; delete m_protocolSeparator; m_protocolSeparator = 0; delete m_host; m_host = 0; + deleteButtons(); m_toggleButton->setToolTip(i18n("Browse (%1, Escape)", shortcut)); @@ -493,7 +470,6 @@ void UrlNavigator::updateContent() setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); m_pathBox->hide(); - QString dir_name; // get the data from the currently selected bookmark KBookmark bookmark = m_bookmarkSelector->selectedBookmark(); @@ -515,8 +491,8 @@ void UrlNavigator::updateContent() } const uint len = bookmarkPath.length(); - // calculate the start point for the Url navigator buttons by counting - // the slashs inside the bookmark Url + // calculate the start point for the URL navigator buttons by counting + // the slashs inside the bookmark URL int slashCount = 0; for (uint i = 0; i < len; ++i) { if (bookmarkPath.at(i) == QChar('/')) { @@ -531,6 +507,7 @@ void UrlNavigator::updateContent() if (!url().isLocalFile() && bookmark.isNull()) { QString protocol = url().protocol(); if (!m_protocols) { + deleteButtons(); m_protocols = new ProtocolCombo(protocol, this); connect(m_protocols, SIGNAL(activated(const QString&)), this, SLOT(slotProtocolChanged(const QString&))); @@ -540,12 +517,10 @@ void UrlNavigator::updateContent() } m_protocols->show(); - if (KProtocolInfo::protocolClass(protocol) != ":local") - { + if (KProtocolInfo::protocolClass(protocol) != ":local") { QString hostText = url().host(); - if (!url().user().isEmpty()) - { + if (!url().user().isEmpty()) { hostText = url().user() + "@" + hostText; } @@ -578,39 +553,87 @@ void UrlNavigator::updateContent() } } - // 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::iterator it = m_navButtons.begin(); + const QLinkedList::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); + } + 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::iterator itBegin = it; + while (it != itEnd) { + (*it)->close(); + (*it)->deleteLater(); + ++it; + } + m_navButtons.erase(itBegin, m_navButtons.end()); +} + +void UrlNavigator::deleteButtons() +{ + QLinkedList::iterator itBegin = m_navButtons.begin(); + QLinkedList::iterator itEnd = m_navButtons.end(); + QLinkedList::iterator it = itBegin; + while (it != itEnd) { + (*it)->close(); + (*it)->deleteLater(); + ++it; } + m_navButtons.erase(itBegin, itEnd); } #include "urlnavigator.moc"