]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinstatusbar.cpp
* Use Nepomuk for getting the meta data instead of KFileMetaInfo.
[dolphin.git] / src / dolphinstatusbar.cpp
index 069cc7450e44bb0c0db4606c01e28b94d4587137..7a9b5dc8a834fc88005504e28790f9319bcbf494 100644 (file)
  ***************************************************************************/
 
 #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>
@@ -34,6 +35,7 @@
 
 #include <kiconloader.h>
 #include <kicon.h>
+#include <klocale.h>
 #include <kvbox.h>
 
 DolphinStatusBar::DolphinStatusBar(QWidget* parent, DolphinView* view) :
@@ -58,41 +60,43 @@ 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();
@@ -101,15 +105,15 @@ DolphinStatusBar::DolphinStatusBar(QWidget* parent, DolphinView* view) :
     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);
 }
 
@@ -123,7 +127,7 @@ void DolphinStatusBar::setMessage(const QString& msg,
     if ((msg == m_messageLabel->text()) && (type == m_messageLabel->type())) {
         return;
     }
-    
+
     m_messageLabel->setMessage(msg, type);
 
     const int widthGap = m_messageLabel->widthGap();
@@ -239,6 +243,7 @@ void DolphinStatusBar::setZoomLevel(int zoomLevel)
     m_zoomOut->setEnabled(zoomLevel > m_zoomSlider->minimum());
     m_zoomIn->setEnabled(zoomLevel < m_zoomSlider->maximum());
     m_view->setZoomLevel(zoomLevel);
+    updateZoomSliderToolTip(zoomLevel);
 }
 
 void DolphinStatusBar::assureVisibleText()
@@ -255,7 +260,7 @@ 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);
         }
@@ -274,6 +279,16 @@ void DolphinStatusBar::zoomIn()
     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;
@@ -283,9 +298,15 @@ void DolphinStatusBar::setExtensionsVisible(bool 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"