[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