***************************************************************************/
#include "dolphinstatusbar.h"
-#include "dolphinsettings.h"
+#include "settings/dolphinsettings.h"
#include "dolphinview.h"
#include "dolphin_generalsettings.h"
#include "statusbarmessagelabel.h"
#include "statusbarspaceinfo.h"
#include "zoomlevelinfo.h"
+#include <QApplication>
#include <QHBoxLayout>
#include <QLabel>
#include <QProgressBar>
#include <kiconloader.h>
#include <kicon.h>
+#include <klocale.h>
#include <kvbox.h>
DolphinStatusBar::DolphinStatusBar(QWidget* parent, DolphinView* view) :
m_messageLabel = new StatusBarMessageLabel(this);
m_messageLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
- // initialize space information
- m_spaceInfo = new StatusBarSpaceInfo(this);
- m_spaceInfo->setUrl(m_view->url());
-
// initialize zoom slider
m_zoomWidget = new QWidget(this);
m_zoomOut = new QToolButton(m_zoomWidget);
m_zoomOut->setIcon(KIcon("zoom-out"));
m_zoomOut->setAutoRaise(true);
-
+
m_zoomSlider = new QSlider(Qt::Horizontal, m_zoomWidget);
m_zoomSlider->setPageStep(1);
-
+
const int min = ZoomLevelInfo::minimumLevel();
const int max = ZoomLevelInfo::maximumLevel();
m_zoomSlider->setRange(min, max);
m_zoomSlider->setValue(view->zoomLevel());
-
+ updateZoomSliderToolTip(view->zoomLevel());
+
m_zoomIn = new QToolButton(m_zoomWidget);
m_zoomIn->setIcon(KIcon("zoom-in"));
m_zoomIn->setAutoRaise(true);
-
+
QHBoxLayout* zoomWidgetLayout = new QHBoxLayout(m_zoomWidget);
zoomWidgetLayout->setSpacing(0);
zoomWidgetLayout->setMargin(0);
zoomWidgetLayout->addWidget(m_zoomOut);
zoomWidgetLayout->addWidget(m_zoomSlider);
zoomWidgetLayout->addWidget(m_zoomIn);
-
+
connect(m_zoomSlider, SIGNAL(valueChanged(int)), this, SLOT(setZoomLevel(int)));
+ connect(m_zoomSlider, SIGNAL(sliderMoved(int)), this, SLOT(showZoomSliderToolTip(int)));
connect(m_view, SIGNAL(zoomLevelChanged(int)), m_zoomSlider, SLOT(setValue(int)));
connect(m_zoomOut, SIGNAL(clicked()), this, SLOT(zoomOut()));
connect(m_zoomIn, SIGNAL(clicked()), this, SLOT(zoomIn()));
-
+
+ // initialize space information
+ m_spaceInfo = new StatusBarSpaceInfo(this);
+ m_spaceInfo->setUrl(m_view->url());
+
// initialize progress information
m_progressText = new QLabel(this);
m_progressText->hide();
m_progressBar->hide();
// initialize sizes
- const int contentHeight = QFontMetrics(m_messageLabel->font()).height() + 4;
- const int barHeight = contentHeight + 4;
+ const int fontHeight = QFontMetrics(m_messageLabel->font()).height();
+ const int zoomWidgetHeight = m_zoomWidget->minimumSizeHint().height();
+ const int contentHeight = (fontHeight < zoomWidgetHeight) ? zoomWidgetHeight : fontHeight;
- setMinimumHeight(barHeight);
- m_messageLabel->setMinimumTextHeight(barHeight);
+ m_messageLabel->setMinimumTextHeight(contentHeight);
m_spaceInfo->setFixedHeight(contentHeight);
m_progressBar->setFixedSize(200, contentHeight);
m_zoomWidget->setFixedSize(150, contentHeight);
-
+
setExtensionsVisible(true);
}
if ((msg == m_messageLabel->text()) && (type == m_messageLabel->type())) {
return;
}
-
+
m_messageLabel->setMessage(msg, type);
const int widthGap = m_messageLabel->widthGap();
m_zoomOut->setEnabled(zoomLevel > m_zoomSlider->minimum());
m_zoomIn->setEnabled(zoomLevel < m_zoomSlider->maximum());
m_view->setZoomLevel(zoomLevel);
+ updateZoomSliderToolTip(zoomLevel);
}
void DolphinStatusBar::assureVisibleText()
const int spaceInfoWidth = settings->showSpaceInfo() ? m_spaceInfo->minimumWidth() : 0;
const int zoomWidgetWidth = settings->showZoomSlider() ? m_zoomWidget->minimumWidth() : 0;
const int widgetsWidth = spaceInfoWidth + zoomWidgetWidth;
-
+
if (widthGap + widgetsWidth <= 0) {
setExtensionsVisible(true);
}
m_zoomSlider->setValue(value + 1);
}
+void DolphinStatusBar::showZoomSliderToolTip(int zoomLevel)
+{
+ updateZoomSliderToolTip(zoomLevel);
+
+ QPoint global = m_zoomSlider->rect().topLeft();
+ global.ry() += m_zoomSlider->height() / 2;
+ QHelpEvent toolTipEvent(QEvent::ToolTip, QPoint(0, 0), m_zoomSlider->mapToGlobal(global));
+ QApplication::sendEvent(m_zoomSlider, &toolTipEvent);
+}
+
void DolphinStatusBar::setExtensionsVisible(bool visible)
{
bool spaceInfoVisible = visible;
spaceInfoVisible = settings->showSpaceInfo();
zoomSliderVisible = settings->showZoomSlider();
}
-
+
m_spaceInfo->setVisible(spaceInfoVisible);
m_zoomWidget->setVisible(zoomSliderVisible);
}
+void DolphinStatusBar::updateZoomSliderToolTip(int zoomLevel)
+{
+ const int size = ZoomLevelInfo::iconSizeForZoomLevel(zoomLevel);
+ m_zoomSlider->setToolTip(i18ncp("@info:tooltip", "Size: 1 pixel", "Size: %1 pixels", size));
+}
+
#include "dolphinstatusbar.moc"