X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/20b58b6c03f6fa56d0cc1da90c13658664c153f1..bfcf764b69b9375b1b458d0a0c8ee95f3cb650ac:/src/urlnavigator.cpp diff --git a/src/urlnavigator.cpp b/src/urlnavigator.cpp index 522198ff0..72a3a9c49 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 * * * @@ -16,97 +16,96 @@ * 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 -#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 "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 +#include +#include +#include +#include +#include +#include +#include + +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); @@ -116,93 +115,45 @@ URLNavigator::URLNavigator(const KUrl& url, 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()); - //kDebug() << "setURL(" << url << ")" << endl; - if (urlStr.at(0) == '~') { - // replace '~' by the home directory - urlStr.remove(0, 1); - urlStr.insert(0, QDir::home().path()); - } + // 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 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(); -// kDebug() << "goin' forward in history" << endl; - return; - } - } - - const KUrl& currURL = m_history[m_historyIndex].url(); - if (currURL == transformedURL) { - // don't insert duplicate history elements -// kDebug() << "currURL == transformedURL" << endl; - return; - } - - updateHistoryElem(); - - const Q3ValueListIterator 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; - } - -/* kDebug() << "history starting ====================" << endl; - int i = 0; - for (QValueListIterator it = m_history.begin(); - it != m_history.end(); - ++it, ++i) - { - kDebug() << i << ": " << (*it).url() << endl; - } - kDebug() << "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::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('/'); } @@ -210,13 +161,13 @@ 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; } -void URLNavigator::goBack() +void UrlNavigator::goBack() { updateHistoryElem(); @@ -229,7 +180,7 @@ void URLNavigator::goBack() } } -void URLNavigator::goForward() +void UrlNavigator::goForward() { if (m_historyIndex > 0) { --m_historyIndex; @@ -239,53 +190,155 @@ void URLNavigator::goForward() } } -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) { - setURLEditable(editOrBrowse); + emit urlsDropped(urls, destination); +} + +void UrlNavigator::setUrl(const KUrl& url) +{ + 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::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::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 it = m_history.begin(); + it != m_history.end(); + ++it, ++i) { - m_pathBox->setFocus(); + kDebug() << i << ": " << (*it).url() << endl; } + kDebug() << "history done ========================" << endl;*/ + + requestActivation(); } -DolphinView* URLNavigator::dolphinView() const +void UrlNavigator::requestActivation() { - return m_dolphinView; + setActive(true); } -void URLNavigator::keyReleaseEvent(QKeyEvent* event) +void UrlNavigator::storeContentsPosition(int x, int y) { - Q3HBox::keyReleaseEvent(event); - if (isURLEditable() && (event->key() == Qt::Key_Escape)) { - setURLEditable(false); + QLinkedList::iterator it = m_history.begin() + m_historyIndex; + (*it).setContentsX(x); + (*it).setContentsY(y); +} + +void UrlNavigator::keyReleaseEvent(QKeyEvent* event) +{ + QWidget::keyReleaseEvent(event); + if (isUrlEditable() && (event->key() == Qt::Key_Escape)) { + setUrlEditable(false); } } -void URLNavigator::slotReturnPressed(const QString& text) +void UrlNavigator::mouseReleaseEvent(QMouseEvent* event) +{ + 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) { // Parts of the following code have been taken // from the class KateFileSelector located in @@ -294,35 +347,35 @@ void URLNavigator::slotReturnPressed(const QString& text) // Copyright (C) 2001 Joseph Wenninger // Copyright (C) 2001 Anders Lund - 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); @@ -330,7 +383,7 @@ void URLNavigator::slotRemoteHostActivated() host = host.right(host.length() - marker - 1); } - marker = host.find("/"); + marker = host.indexOf("/"); if (marker != -1) { u.setPath(host.right(host.length() - marker)); @@ -358,18 +411,19 @@ void URLNavigator::slotRemoteHostActivated() } } - 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::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; @@ -377,12 +431,14 @@ void URLNavigator::slotProtocolChanged(const QString& protocol) 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())); @@ -398,21 +454,7 @@ void URLNavigator::slotProtocolChanged(const QString& protocol) } } -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) { // kDebug() << "received redirection to " << newUrl << endl; kDebug() << "received redirection from " << oldUrl << " to " << newUrl << endl; @@ -425,70 +467,60 @@ kDebug() << "received redirection from " << oldUrl << " to " << newUrl << endl; 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::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::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(); @@ -496,13 +528,13 @@ void URLNavigator::updateContent() 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 { @@ -526,7 +558,9 @@ void URLNavigator::updateContent() 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&))); } @@ -535,18 +569,18 @@ void URLNavigator::updateContent() } 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())); @@ -573,39 +607,93 @@ 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); + 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::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); +} + +void UrlNavigator::appendWidget(QWidget* widget) +{ + m_layout->insertWidget(m_layout->count() - 1, widget); } #include "urlnavigator.moc"