diff options
| author | Peter Penz <[email protected]> | 2010-10-09 15:22:49 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2010-10-09 15:22:49 +0000 |
| commit | 708312d759e8a56d62dd9d6ac2a0d0f12d617817 (patch) | |
| tree | 471f259389a4f913b6295797f7592c162b5244a6 /src/views/dolphincolumnview.cpp | |
| parent | abd36cde0c3e41d933bd18a5d7c44e17d0e94ab9 (diff) | |
Allow the user to resize the columns.
BUG: 190030
BUG: 196717
FIXED-IN: 4.6.0
svn path=/trunk/KDE/kdebase/apps/; revision=1184247
Diffstat (limited to 'src/views/dolphincolumnview.cpp')
| -rw-r--r-- | src/views/dolphincolumnview.cpp | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/src/views/dolphincolumnview.cpp b/src/views/dolphincolumnview.cpp index baae66107..309674122 100644 --- a/src/views/dolphincolumnview.cpp +++ b/src/views/dolphincolumnview.cpp @@ -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 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, 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,6 +81,13 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, 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 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, 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 @@ bool DolphinColumnView::acceptsDrop(const QModelIndex& index) const 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); |
