┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kitemlistview.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2011-09-23 19:09:01 +0200
committerPeter Penz <[email protected]>2011-09-23 19:11:05 +0200
commit56852cff392f33ee731129fd9a755544d817e590 (patch)
tree235588444cec355da4093fc405cc8072715a3e15 /src/kitemviews/kitemlistview.cpp
parentccd92b76e74a00aef0f5186af7d797a63c6b80c6 (diff)
Allow resizing of columns by the user
Still open: - Column content is not clipped correctly - First column is not automatically increased to the available width like in Dolphin 1.7
Diffstat (limited to 'src/kitemviews/kitemlistview.cpp')
-rw-r--r--src/kitemviews/kitemlistview.cpp49
1 files changed, 42 insertions, 7 deletions
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
index dd2915b8e..ef429e544 100644
--- a/src/kitemviews/kitemlistview.cpp
+++ b/src/kitemviews/kitemlistview.cpp
@@ -76,7 +76,8 @@ KItemListView::KItemListView(QGraphicsWidget* parent) :
m_mousePos(),
m_autoScrollIncrement(0),
m_autoScrollTimer(0),
- m_header(0)
+ m_header(0),
+ m_useHeaderWidths(false)
{
setAcceptHoverEvents(true);
@@ -239,11 +240,18 @@ void KItemListView::setHeaderShown(bool show)
m_header->setVisibleRoles(m_visibleRoles);
m_header->setVisibleRolesWidths(headerRolesWidths());
m_header->setZValue(1);
+
+ m_useHeaderWidths = false;
updateHeaderWidth();
+
+ connect(m_header, SIGNAL(visibleRoleWidthChanged(QByteArray,qreal,qreal)),
+ this, SLOT(slotVisibleRoleWidthChanged(QByteArray,qreal,qreal)));
+
m_layouter->setHeaderHeight(m_header->size().height());
} else if (!show && m_header) {
delete m_header;
m_header = 0;
+ m_useHeaderWidths = false;
m_layouter->setHeaderHeight(0);
}
}
@@ -572,7 +580,9 @@ void KItemListView::resizeEvent(QGraphicsSceneResizeEvent* event)
void KItemListView::slotItemsInserted(const KItemRangeList& itemRanges)
{
- markVisibleRolesSizesAsDirty();
+ if (!m_useHeaderWidths) {
+ markVisibleRolesSizesAsDirty();
+ }
const bool hasMultipleRanges = (itemRanges.count() > 1);
if (hasMultipleRanges) {
@@ -645,7 +655,9 @@ void KItemListView::slotItemsInserted(const KItemRangeList& itemRanges)
void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges)
{
- markVisibleRolesSizesAsDirty();
+ if (!m_useHeaderWidths) {
+ markVisibleRolesSizesAsDirty();
+ }
const bool hasMultipleRanges = (itemRanges.count() > 1);
if (hasMultipleRanges) {
@@ -867,6 +879,25 @@ void KItemListView::slotRubberBandActivationChanged(bool active)
update();
}
+void KItemListView::slotVisibleRoleWidthChanged(const QByteArray& role,
+ qreal currentWidth,
+ qreal previousWidth)
+{
+ Q_UNUSED(previousWidth);
+ Q_ASSERT(m_header);
+
+ m_useHeaderWidths = true;
+
+ if (m_visibleRolesSizes.contains(role)) {
+ QSizeF roleSize = m_visibleRolesSizes.value(role);
+ roleSize.setWidth(currentWidth);
+ m_visibleRolesSizes.insert(role, roleSize);
+ }
+
+ m_layouter->setItemSize(QSizeF()); // Forces an update in applyDynamicItemSize()
+ updateLayout();
+}
+
void KItemListView::triggerAutoScrolling()
{
if (!m_autoScrollTimer) {
@@ -1267,6 +1298,7 @@ bool KItemListView::markVisibleRolesSizesAsDirty()
if (dirty) {
m_visibleRolesSizes.clear();
m_layouter->setItemSize(QSizeF());
+ m_useHeaderWidths = false;
}
return dirty;
}
@@ -1279,16 +1311,14 @@ void KItemListView::applyDynamicItemSize()
if (m_visibleRolesSizes.isEmpty()) {
m_visibleRolesSizes = visibleRoleSizes();
- foreach (KItemListWidget* widget, visibleItemListWidgets()) {
- widget->setVisibleRolesSizes(m_visibleRolesSizes);
- }
-
if (m_header) {
m_header->setVisibleRolesWidths(headerRolesWidths());
}
}
if (m_layouter->itemSize().isEmpty()) {
+ // Calculate the maximum size of an item by considering the
+ // visible role sizes and apply them to the layouter.
qreal requiredWidth = 0;
qreal requiredHeight = 0;
@@ -1309,6 +1339,11 @@ void KItemListView::applyDynamicItemSize()
}
m_layouter->setItemSize(dynamicItemSize);
+
+ // Update the role sizes for all visible widgets
+ foreach (KItemListWidget* widget, visibleItemListWidgets()) {
+ widget->setVisibleRolesSizes(m_visibleRolesSizes);
+ }
}
}