[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/apps/dolphin/src/views
From:       Peter Penz <peter.penz19 () gmail ! com>
Date:       2010-10-09 15:22:49
Message-ID: 20101009152249.7BBF8AC894 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1184247 by ppenz:

Allow the user to resize the columns.

BUG: 190030
BUG: 196717
FIXED-IN: 4.6.0



 M  +71 -1     dolphincolumnview.cpp  
 M  +5 -0      dolphincolumnview.h  
 M  +14 -17    dolphincolumnviewcontainer.cpp  
 M  +0 -1      dolphincolumnviewcontainer.h  


--- trunk/KDE/kdebase/apps/dolphin/src/views/dolphincolumnview.cpp #1184246:1184247
@@ -40,13 +40,16 @@
 #include <kdirlister.h>
 #include <kfileitem.h>
 #include <kio/previewjob.h>
+#include <kicon.h>
 #include <kiconeffect.h>
 #include <kjob.h>
+#include <klocale.h>
 #include <konqmimedata.h>
 
 #include <QApplication>
 #include <QClipboard>
 #include <QHeaderView>
+#include <QLabel>
 #include <QPainter>
 #include <QPoint>
 #include <QScrollBar>
@@ -64,7 +67,9 @@
     m_decorationSize(),
     m_dirLister(0),
     m_dolphinModel(0),
-    m_proxyModel(0)
+    m_proxyModel(0),
+    m_resizeWidget(0),
+    m_resizeXOrigin(-1)
 {
     setMouseTracking(true);
     setAcceptDrops(true);
@@ -76,7 +81,14 @@
     setRootIsDecorated(false);
     setItemsExpandable(false);
     setEditTriggers(QAbstractItemView::NoEditTriggers);
+    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
 
+    m_resizeWidget = new QLabel(this);
+    m_resizeWidget->setPixmap(KIcon("transform-move").pixmap(KIconLoader::SizeSmall));
+    m_resizeWidget->setToolTip(i18nc("@info:tooltip", "Resize column"));
+    setCornerWidget(m_resizeWidget);
+    m_resizeWidget->installEventFilter(this);
+
     const ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
     Q_ASSERT(settings != 0);
 
@@ -90,6 +102,9 @@
         m_font.setPointSizeF(settings->fontSize());
     }
 
+    setMinimumWidth(settings->fontSize() * 10);
+    setMaximumWidth(settings->columnWidth());
+
     connect(this, SIGNAL(viewportEntered()),
             m_container->m_dolphinViewController, SLOT(emitViewportEntered()));
     connect(this, SIGNAL(entered(const QModelIndex&)),
@@ -380,6 +395,61 @@
     return false;
 }
 
+bool DolphinColumnView::eventFilter(QObject* watched, QEvent* event)
+{
+    if (watched == m_resizeWidget) {
+        switch (event->type()) {
+        case QEvent::MouseButtonPress: {
+            // Initiate the resizing of the column
+            QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
+            m_resizeXOrigin = mouseEvent->globalX();
+            m_resizeWidget->setMouseTracking(true);
+            event->accept();
+            return true;
+        }
+
+        case QEvent::MouseButtonDblClick: {
+            // Reset the column width to the default value
+            const ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
+            setMaximumWidth(settings->columnWidth());
+            m_container->layoutColumns();
+            m_resizeWidget->setMouseTracking(false);
+            m_resizeXOrigin = -1;
+            event->accept();
+            return true;
+        }
+
+        case QEvent::MouseMove: {
+            // Resize the column and trigger a relayout of the container
+            QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
+            int requestedWidth = maximumWidth() - m_resizeXOrigin + mouseEvent->globalX();;
+            if (requestedWidth < minimumWidth()) {
+                requestedWidth = minimumWidth();
+            }
+            setMaximumWidth(requestedWidth);
+
+            m_container->layoutColumns();
+
+            m_resizeXOrigin = mouseEvent->globalX();
+
+            event->accept();
+            return true;
+        }
+
+        case QEvent::MouseButtonRelease: {
+            // The resizing has been finished
+            m_resizeWidget->setMouseTracking(false);
+            m_resizeXOrigin = -1;
+            event->accept();
+            return true;
+        }
+
+        default:
+            break;
+        }
+    }
+    return DolphinTreeView::eventFilter(watched, event);
+}
 void DolphinColumnView::setZoomLevel(int level)
 {
     const int size = ZoomLevelInfo::iconSizeForZoomLevel(level);
--- trunk/KDE/kdebase/apps/dolphin/src/views/dolphincolumnview.h #1184246:1184247
@@ -34,6 +34,7 @@
 class DolphinSortFilterProxyModel;
 class DolphinDirLister;
 class KFileItem;
+class QLabel;
 class SelectionManager;
 class ViewExtensionsFactory;
 
@@ -102,6 +103,7 @@
     virtual void currentChanged(const QModelIndex& current, const QModelIndex& previous);
     virtual QRect visualRect(const QModelIndex& index) const;
     virtual bool acceptsDrop(const QModelIndex& index) const;
+    virtual bool eventFilter(QObject* watched, QEvent* event);
 
 private slots:
     void setZoomLevel(int level);
@@ -136,6 +138,9 @@
     DolphinModel* m_dolphinModel;
     DolphinSortFilterProxyModel* m_proxyModel;
 
+    QLabel* m_resizeWidget;
+    int m_resizeXOrigin;
+
     friend class DolphinColumnViewContainer;
 };
 
--- trunk/KDE/kdebase/apps/dolphin/src/views/dolphincolumnviewcontainer.cpp #1184246:1184247
@@ -79,7 +79,6 @@
     m_emptyViewport->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
 
     updateColumnsBackground(true);
-
 }
 
 DolphinColumnViewContainer::~DolphinColumnViewContainer()
@@ -171,7 +170,6 @@
             column->setGeometry(QRect(-1, -1, 1, 1));
             column->show();
             layoutColumns();
-            updateScrollBar();
         }
     }
 
@@ -199,7 +197,6 @@
 {
     QScrollArea::resizeEvent(event);
     layoutColumns();
-    updateScrollBar();
     assureVisibleActiveColumn();
 }
 
@@ -249,41 +246,41 @@
 
 void DolphinColumnViewContainer::layoutColumns()
 {
-    const int gap = 4;
-
-    ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
-    const int columnWidth = settings->columnWidth();
-
+    // Layout the position of the columns corresponding to their maximum width
     QRect emptyViewportRect;
     if (isRightToLeft()) {
+        int columnWidth = m_columns[0]->maximumWidth();
         int x = viewport()->width() - columnWidth + m_contentX;
         foreach (DolphinColumnView* column, m_columns) {
-            column->setGeometry(QRect(x, 0, columnWidth - gap, viewport()->height()));
+            columnWidth = column->maximumWidth();
+            column->setGeometry(QRect(x, 0, columnWidth, viewport()->height()));
             x -= columnWidth;
         }
-        emptyViewportRect = QRect(0, 0, x + columnWidth - gap, viewport()->height());
+        emptyViewportRect = QRect(0, 0, x + columnWidth, viewport()->height());
     } else {
         int x = m_contentX;
         foreach (DolphinColumnView* column, m_columns) {
-            column->setGeometry(QRect(x, 0, columnWidth - gap, viewport()->height()));
+            const int columnWidth = column->maximumWidth();
+            column->setGeometry(QRect(x, 0, columnWidth, viewport()->height()));
             x += columnWidth;
         }
-        emptyViewportRect = QRect(x, 0, viewport()->width() - x - gap, viewport()->height());
+        emptyViewportRect = QRect(x, 0, viewport()->width() - x, viewport()->height());
     }
 
+    // Show an empty viewport if the columns don't cover the whole viewport
     if (emptyViewportRect.isValid()) {
         m_emptyViewport->show();
         m_emptyViewport->setGeometry(emptyViewportRect);
     } else {
         m_emptyViewport->hide();
     }
+
+    // Update the horizontal position indicator
+    int contentWidth = 0;
+    foreach (DolphinColumnView* column, m_columns) {
+        contentWidth += column->maximumWidth();
 }
 
-void DolphinColumnViewContainer::updateScrollBar()
-{
-    ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
-    const int contentWidth = m_columns.count() * settings->columnWidth();
-
     horizontalScrollBar()->setPageStep(contentWidth);
     horizontalScrollBar()->setRange(0, contentWidth - viewport()->width());
 }
--- trunk/KDE/kdebase/apps/dolphin/src/views/dolphincolumnviewcontainer.h #1184246:1184247
@@ -98,7 +98,6 @@
 
 private:
     void layoutColumns();
-    void updateScrollBar();
 
     /**
      * Assures that the currently active column is fully visible
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic