X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/9a5f54d83ddc84aa68348058acfcb385ef621577..4b0293e22ea169b0f8493644f2c4e8ef80e4e8fe:/src/urlnavigatorbutton.cpp diff --git a/src/urlnavigatorbutton.cpp b/src/urlnavigatorbutton.cpp index eecea2c77..eb372f558 100644 --- a/src/urlnavigatorbutton.cpp +++ b/src/urlnavigatorbutton.cpp @@ -40,28 +40,28 @@ #include "urlnavigator.h" #include "dolphinview.h" -#include "dolphin.h" +#include "dolphinmainwindow.h" -URLNavigatorButton::URLNavigatorButton(int index, URLNavigator* parent) : - URLButton(parent), +UrlNavigatorButton::UrlNavigatorButton(int index, UrlNavigator* parent) : + UrlButton(parent), m_index(-1), m_listJob(0) { setAcceptDrops(true); setMinimumWidth(arrowWidth()); setIndex(index); - connect(this, SIGNAL(clicked()), this, SLOT(updateNavigatorURL())); + connect(this, SIGNAL(clicked()), this, SLOT(updateNavigatorUrl())); m_popupDelay = new QTimer(this); connect(m_popupDelay, SIGNAL(timeout()), this, SLOT(startListJob())); connect(this, SIGNAL(pressed()), this, SLOT(startPopupDelay())); } -URLNavigatorButton::~URLNavigatorButton() +UrlNavigatorButton::~UrlNavigatorButton() { } -void URLNavigatorButton::setIndex(int index) +void UrlNavigatorButton::setIndex(int index) { m_index = index; @@ -72,7 +72,7 @@ void URLNavigatorButton::setIndex(int index) QString path(urlNavigator()->url().pathOrUrl()); setText(path.section('/', index, index)); - // Check whether the button indicates the full path of the URL. If + // Check whether the button indicates the full path of the Url. If // this is the case, the button is marked as 'active'. ++index; QFont adjustedFont(font()); @@ -89,13 +89,16 @@ void URLNavigatorButton::setIndex(int index) update(); } -int URLNavigatorButton::index() const +QSize UrlNavigatorButton::sizeHint() const { - return m_index; + const int width = fontMetrics().width(text()) + (arrowWidth() * 4); + return QSize(width, UrlButton::sizeHint().height()); } -void URLNavigatorButton::drawButton(QPainter* painter) +void UrlNavigatorButton::paintEvent(QPaintEvent* event) { + QPainter painter(this); + painter.setClipRect(event->rect()); const int buttonWidth = width(); const int buttonHeight = height(); @@ -109,17 +112,17 @@ void URLNavigatorButton::drawButton(QPainter* painter) foregroundColor = KGlobalSettings::highlightedTextColor(); } else { - backgroundColor = colorGroup().background(); + backgroundColor = palette().brush(QPalette::Background).color(); foregroundColor = KGlobalSettings::buttonTextColor(); } // dimm the colors if the parent view does not have the focus const DolphinView* parentView = urlNavigator()->dolphinView(); - const Dolphin& dolphin = Dolphin::mainWin(); + const DolphinMainWindow* dolphin = parentView->mainWindow(); - const bool isActive = (dolphin.activeView() == parentView); + const bool isActive = (dolphin->activeView() == parentView); if (!isActive) { - QColor dimmColor(colorGroup().background()); + QColor dimmColor(palette().brush(QPalette::Background).color()); foregroundColor = mixColors(foregroundColor, dimmColor); if (isHighlighted) { backgroundColor = mixColors(backgroundColor, dimmColor); @@ -127,18 +130,18 @@ void URLNavigatorButton::drawButton(QPainter* painter) } // draw button background - painter->setPen(Qt::NoPen); - painter->setBrush(backgroundColor); - painter->drawRect(0, 0, buttonWidth, buttonHeight); + painter.setPen(Qt::NoPen); + painter.setBrush(backgroundColor); + painter.drawRect(0, 0, buttonWidth, buttonHeight); int textWidth = buttonWidth; if (isDisplayHintEnabled(ActivatedHint) && isActive || isHighlighted) { - painter->setPen(foregroundColor); + painter.setPen(foregroundColor); } else { // dimm the foreground color by mixing it with the background foregroundColor = mixColors(foregroundColor, backgroundColor); - painter->setPen(foregroundColor); + painter.setPen(foregroundColor); } if (!isDisplayHintEnabled(ActivatedHint)) { @@ -150,8 +153,8 @@ void URLNavigatorButton::drawButton(QPainter* painter) const int startTopY = middleY - (width - 1); const int startBottomY = middleY + (width - 1); for (int i = 0; i < width; ++i) { - painter->drawLine(startX, startTopY + i, startX + i, startTopY + i); - painter->drawLine(startX, startBottomY - i, startX + i, startBottomY - i); + painter.drawLine(startX, startTopY + i, startX + i, startTopY + i); + painter.drawLine(startX, startBottomY - i, startX + i, startBottomY - i); } textWidth = startX - border; @@ -159,7 +162,7 @@ void URLNavigatorButton::drawButton(QPainter* painter) const bool clipped = isTextClipped(); const int align = clipped ? Qt::AlignVCenter : Qt::AlignCenter; - painter->drawText(QRect(0, 0, textWidth, buttonHeight), align, text()); + painter.drawText(QRect(0, 0, textWidth, buttonHeight), align, text()); if (clipped) { // Blend the right area of the text with the background, as the @@ -172,9 +175,9 @@ void URLNavigatorButton::drawButton(QPainter* painter) const int greenInc = (foregroundColor.green() - backgroundColor.green()) / blendSteps; const int blueInc = (foregroundColor.blue() - backgroundColor.blue()) / blendSteps; for (int i = 0; i < blendSteps; ++i) { - painter->setClipRect(QRect(textWidth - i, 0, 1, buttonHeight)); - painter->setPen(blendColor); - painter->drawText(QRect(0, 0, textWidth, buttonHeight), align, text()); + painter.setClipRect(QRect(textWidth - i, 0, 1, buttonHeight)); + painter.setPen(blendColor); + painter.drawText(QRect(0, 0, textWidth, buttonHeight), align, text()); blendColor.setRgb(blendColor.red() + redInc, blendColor.green() + greenInc, @@ -183,24 +186,24 @@ void URLNavigatorButton::drawButton(QPainter* painter) } } -void URLNavigatorButton::enterEvent(QEvent* event) +void UrlNavigatorButton::enterEvent(QEvent* event) { - URLButton::enterEvent(event); + UrlButton::enterEvent(event); // if the text is clipped due to a small window width, the text should // be shown as tooltip if (isTextClipped()) { - QToolTip::add(this, text()); + setToolTip(text()); } } -void URLNavigatorButton::leaveEvent(QEvent* event) +void UrlNavigatorButton::leaveEvent(QEvent* event) { - URLButton::leaveEvent(event); - QToolTip::remove(this); + UrlButton::leaveEvent(event); + setToolTip(QString()); } -void URLNavigatorButton::dropEvent(QDropEvent* event) +void UrlNavigatorButton::dropEvent(QDropEvent* event) { if (m_index < 0) { return; @@ -214,14 +217,14 @@ void URLNavigatorButton::dropEvent(QDropEvent* event) QString path(urlNavigator()->url().prettyUrl()); path = path.section('/', 0, m_index); - Dolphin::mainWin().dropURLs(urls, KUrl(path)); + Dolphin::mainWin().dropUrls(urls, KUrl(path)); setDisplayHintEnabled(DraggedHint, false); update(); }*/ } -void URLNavigatorButton::dragEnterEvent(QDragEnterEvent* event) +void UrlNavigatorButton::dragEnterEvent(QDragEnterEvent* event) { /* KDE4-TODO: event->accept(KUrlDrag::canDecode(event)); @@ -230,36 +233,37 @@ void URLNavigatorButton::dragEnterEvent(QDragEnterEvent* event) update(); } -void URLNavigatorButton::dragLeaveEvent(QDragLeaveEvent* event) +void UrlNavigatorButton::dragLeaveEvent(QDragLeaveEvent* event) { - URLButton::dragLeaveEvent(event); + UrlButton::dragLeaveEvent(event); setDisplayHintEnabled(DraggedHint, false); update(); } -void URLNavigatorButton::updateNavigatorURL() +void UrlNavigatorButton::updateNavigatorUrl() { if (m_index < 0) { return; } - URLNavigator* navigator = urlNavigator(); + UrlNavigator* navigator = urlNavigator(); assert(navigator != 0); - navigator->setURL(navigator->url(m_index)); + navigator->setUrl(navigator->url(m_index)); } -void URLNavigatorButton::startPopupDelay() +void UrlNavigatorButton::startPopupDelay() { if (m_popupDelay->isActive() || m_listJob || m_index < 0) { return; } - m_popupDelay->start(300, true); + m_popupDelay->setSingleShot(true); + m_popupDelay->start(300); } -void URLNavigatorButton::stopPopupDelay() +void UrlNavigatorButton::stopPopupDelay() { m_popupDelay->stop(); if (m_listJob) { @@ -268,7 +272,7 @@ void URLNavigatorButton::stopPopupDelay() } } -void URLNavigatorButton::startListJob() +void UrlNavigatorButton::startListJob() { if (m_listJob) { return; @@ -280,10 +284,10 @@ void URLNavigatorButton::startListJob() connect(m_listJob, SIGNAL(entries(KIO::Job*, const KIO::UDSEntryList &)), this, SLOT(entriesList(KIO::Job*, const KIO::UDSEntryList&))); - connect(m_listJob, SIGNAL(result(KIO::Job*)), this, SLOT(listJobFinished(KIO::Job*))); + connect(m_listJob, SIGNAL(result(KJob*)), this, SLOT(listJobFinished(KJob*))); } -void URLNavigatorButton::entriesList(KIO::Job* job, const KIO::UDSEntryList& entries) +void UrlNavigatorButton::entriesList(KIO::Job* job, const KIO::UDSEntryList& entries) { if (job != m_listJob) { return; @@ -328,7 +332,7 @@ void URLNavigatorButton::entriesList(KIO::Job* job, const KIO::UDSEntryList& ent m_subdirs.sort(); } -void URLNavigatorButton::listJobFinished(KIO::Job* job) +void UrlNavigatorButton::listJobFinished(KJob* job) { if (job != m_listJob) { return; @@ -348,8 +352,8 @@ void URLNavigatorButton::listJobFinished(KIO::Job* job) int i = 0; while (it != itEnd) { dirsMenu->insertItem(*it, i); - ++i; ++it; + ++i; } int result = dirsMenu->exec(urlNavigator()->mapToGlobal(geometry().bottomLeft())); @@ -357,7 +361,7 @@ void URLNavigatorButton::listJobFinished(KIO::Job* job) if (result != -1) { KUrl url = urlNavigator()->url(m_index); url.addPath(m_subdirs[result]); - urlNavigator()->setURL(url); + urlNavigator()->setUrl(url); } m_listJob = 0; @@ -366,7 +370,7 @@ void URLNavigatorButton::listJobFinished(KIO::Job* job) setDisplayHintEnabled(PopupActiveHint, false); } -int URLNavigatorButton::arrowWidth() const +int UrlNavigatorButton::arrowWidth() const { int width = (height() / 2) - 7; if (width < 4) { @@ -375,7 +379,7 @@ int URLNavigatorButton::arrowWidth() const return width; } -bool URLNavigatorButton::isTextClipped() const +bool UrlNavigatorButton::isTextClipped() const { int availableWidth = width(); if (!isDisplayHintEnabled(ActivatedHint)) {