Changeset View
Changeset View
Standalone View
Standalone View
src/filewidgets/kdiroperatordetailview.cpp
Show All 26 Lines | |||||
27 | #include <QAbstractProxyModel> | 27 | #include <QAbstractProxyModel> | ||
28 | #include <QApplication> | 28 | #include <QApplication> | ||
29 | #include <QHeaderView> | 29 | #include <QHeaderView> | ||
30 | #include <QListView> | 30 | #include <QListView> | ||
31 | #include <QMimeData> | 31 | #include <QMimeData> | ||
32 | #include <QResizeEvent> | 32 | #include <QResizeEvent> | ||
33 | #include <QScrollBar> | 33 | #include <QScrollBar> | ||
34 | 34 | | |||
35 | KDirOperatorDetailView::KDirOperatorDetailView(QWidget *parent) : | 35 | KDirOperatorDetailView::KDirOperatorDetailView(QWidget *parent) : | ||
36 | QTreeView(parent), | 36 | QTreeView(parent), | ||
ngraham: Oops, we shouldn't get rid of the initialization for both of these variables, just the one for… | |||||
37 | m_resizeColumns(true), m_hideDetailColumns(false) | 37 | m_hideDetailColumns(false) | ||
38 | { | 38 | { | ||
39 | setRootIsDecorated(false); | 39 | setRootIsDecorated(false); | ||
40 | setSortingEnabled(true); | 40 | setSortingEnabled(true); | ||
41 | setUniformRowHeights(true); | 41 | setUniformRowHeights(true); | ||
42 | setDragDropMode(QListView::DragOnly); | 42 | setDragDropMode(QListView::DragOnly); | ||
43 | setSelectionBehavior(QAbstractItemView::SelectRows); | 43 | setSelectionBehavior(QAbstractItemView::SelectRows); | ||
44 | setEditTriggers(QAbstractItemView::NoEditTriggers); | 44 | setEditTriggers(QAbstractItemView::NoEditTriggers); | ||
45 | setVerticalScrollMode(QListView::ScrollPerPixel); | 45 | setVerticalScrollMode(QListView::ScrollPerPixel); | ||
46 | setHorizontalScrollMode(QListView::ScrollPerPixel); | 46 | setHorizontalScrollMode(QListView::ScrollPerPixel); | ||
47 | } | 47 | } | ||
48 | 48 | | |||
49 | KDirOperatorDetailView::~KDirOperatorDetailView() | 49 | KDirOperatorDetailView::~KDirOperatorDetailView() | ||
50 | { | 50 | { | ||
51 | } | 51 | } | ||
52 | 52 | | |||
53 | void KDirOperatorDetailView::setModel(QAbstractItemModel *model) | | |||
54 | { | | |||
55 | QTreeView::setModel(model); | | |||
56 | | ||||
57 | if (model->rowCount() == 0) { | | |||
58 | // The model is empty. Assure that the columns get automatically resized | | |||
59 | // until the loading has been finished. | | |||
60 | QAbstractProxyModel *proxyModel = static_cast<QAbstractProxyModel *>(model); | | |||
61 | KDirModel *dirModel = static_cast<KDirModel *>(proxyModel->sourceModel()); | | |||
62 | connect(dirModel->dirLister(), SIGNAL(completed()), | | |||
63 | this, SLOT(resetResizing())); | | |||
64 | } else { | | |||
65 | resetResizing(); | | |||
66 | } | | |||
67 | } | | |||
68 | | ||||
69 | bool KDirOperatorDetailView::setViewMode(KFile::FileView viewMode) | 53 | bool KDirOperatorDetailView::setViewMode(KFile::FileView viewMode) | ||
ngraham: Uh-oh :) | |||||
sharvey: What is that? (finding it and killing it) | |||||
70 | { | 54 | { | ||
ngraham: Uh-oh part II :) | |||||
71 | bool tree = false; | 55 | bool tree = false; | ||
72 | 56 | | |||
73 | if (KFile::isDetailView(viewMode)) { | 57 | if (KFile::isDetailView(viewMode)) { | ||
74 | m_hideDetailColumns = false; | 58 | m_hideDetailColumns = false; | ||
75 | } else if (KFile::isTreeView(viewMode)) { | 59 | } else if (KFile::isTreeView(viewMode)) { | ||
76 | m_hideDetailColumns = true; | 60 | m_hideDetailColumns = true; | ||
77 | tree = true; | 61 | tree = true; | ||
78 | } else if (KFile::isDetailTreeView(viewMode)) { | 62 | } else if (KFile::isDetailTreeView(viewMode)) { | ||
Show All 16 Lines | |||||
95 | 79 | | |||
96 | return true; | 80 | return true; | ||
97 | } | 81 | } | ||
98 | 82 | | |||
99 | bool KDirOperatorDetailView::event(QEvent *event) | 83 | bool KDirOperatorDetailView::event(QEvent *event) | ||
100 | { | 84 | { | ||
101 | if (event->type() == QEvent::Polish) { | 85 | if (event->type() == QEvent::Polish) { | ||
102 | QHeaderView *headerView = header(); | 86 | QHeaderView *headerView = header(); | ||
103 | headerView->setSectionResizeMode(QHeaderView::Interactive); | 87 | headerView->setSectionResizeMode(0, QHeaderView::Stretch); | ||
88 | headerView->setSectionResizeMode(1, QHeaderView::ResizeToContents); | ||||
89 | headerView->setSectionResizeMode(2, QHeaderView::ResizeToContents); | ||||
For first colum you want to set it to 0, here it blew up the "Size" column to full width broulik: For first colum you want to set it to `0`, here it blew up the "Size" column to full width | |||||
I got misled by my manual adjustment of the columns from previous tests. Thanks for catching. sharvey: I got misled by my manual adjustment of the columns from previous tests. Thanks for catching. | |||||
104 | headerView->setStretchLastSection(false); | 90 | headerView->setStretchLastSection(false); | ||
105 | headerView->setSectionsMovable(false); | 91 | headerView->setSectionsMovable(false); | ||
106 | 92 | | |||
107 | setColumnHidden(KDirModel::Size, m_hideDetailColumns); | 93 | setColumnHidden(KDirModel::Size, m_hideDetailColumns); | ||
108 | setColumnHidden(KDirModel::ModifiedTime, m_hideDetailColumns); | 94 | setColumnHidden(KDirModel::ModifiedTime, m_hideDetailColumns); | ||
109 | hideColumn(KDirModel::Type); | 95 | hideColumn(KDirModel::Type); | ||
110 | hideColumn(KDirModel::Permissions); | 96 | hideColumn(KDirModel::Permissions); | ||
111 | hideColumn(KDirModel::Owner); | 97 | hideColumn(KDirModel::Owner); | ||
Show All 10 Lines | |||||
122 | 108 | | |||
123 | void KDirOperatorDetailView::dragEnterEvent(QDragEnterEvent *event) | 109 | void KDirOperatorDetailView::dragEnterEvent(QDragEnterEvent *event) | ||
124 | { | 110 | { | ||
125 | if (event->mimeData()->hasUrls()) { | 111 | if (event->mimeData()->hasUrls()) { | ||
126 | event->acceptProposedAction(); | 112 | event->acceptProposedAction(); | ||
127 | } | 113 | } | ||
128 | } | 114 | } | ||
129 | 115 | | |||
130 | void KDirOperatorDetailView::resizeEvent(QResizeEvent *event) | | |||
131 | { | | |||
132 | QTreeView::resizeEvent(event); | | |||
133 | expandNameColumn(); | | |||
134 | } | | |||
135 | | ||||
136 | void KDirOperatorDetailView::mousePressEvent(QMouseEvent *event) | 116 | void KDirOperatorDetailView::mousePressEvent(QMouseEvent *event) | ||
137 | { | 117 | { | ||
138 | QTreeView::mousePressEvent(event); | 118 | QTreeView::mousePressEvent(event); | ||
139 | 119 | | |||
140 | const QModelIndex index = indexAt(event->pos()); | 120 | const QModelIndex index = indexAt(event->pos()); | ||
141 | if (!index.isValid() || (index.column() != KDirModel::Name)) { | 121 | if (!index.isValid() || (index.column() != KDirModel::Name)) { | ||
142 | const Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers(); | 122 | const Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers(); | ||
143 | if (!(modifiers & Qt::ShiftModifier) && !(modifiers & Qt::ControlModifier)) { | 123 | if (!(modifiers & Qt::ShiftModifier) && !(modifiers & Qt::ControlModifier)) { | ||
144 | clearSelection(); | 124 | clearSelection(); | ||
145 | } | 125 | } | ||
146 | } | 126 | } | ||
147 | } | 127 | } | ||
148 | 128 | | |||
149 | void KDirOperatorDetailView::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) | 129 | void KDirOperatorDetailView::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) | ||
150 | { | 130 | { | ||
151 | QTreeView::currentChanged(current, previous); | 131 | QTreeView::currentChanged(current, previous); | ||
152 | } | 132 | } | ||
153 | | ||||
154 | void KDirOperatorDetailView::resetResizing() | | |||
155 | { | | |||
156 | connect(model(), &QAbstractItemModel::layoutChanged, this, &KDirOperatorDetailView::expandNameColumn, | | |||
157 | Qt::UniqueConnection); | | |||
158 | | ||||
159 | expandNameColumn(); | | |||
160 | m_resizeColumns = false; | | |||
161 | } | | |||
162 | | ||||
163 | void KDirOperatorDetailView::expandNameColumn() | | |||
164 | { | | |||
165 | if (m_resizeColumns) { | | |||
166 | QHeaderView *headerView = header(); | | |||
167 | headerView->resizeSections(QHeaderView::ResizeToContents); | | |||
168 | | ||||
169 | int notNameWidth = 0; | | |||
170 | const int count = headerView->count(); | | |||
171 | for (int i = 1; i < count; ++i) { | | |||
172 | notNameWidth += headerView->sectionSize(i); | | |||
173 | } | | |||
174 | | ||||
175 | // try to stretch the name column if enough width is available | | |||
176 | const int oldNameColumnWidth = headerView->sectionSize(KDirModel::Name); | | |||
177 | const int nameColumnWidth = qMax(oldNameColumnWidth, viewport()->width() - notNameWidth); | | |||
178 | headerView->resizeSection(KDirModel::Name, nameColumnWidth); | | |||
179 | } | | |||
180 | } | | |||
181 | |
Oops, we shouldn't get rid of the initialization for both of these variables, just the one for m_resizeColumns. Remember to remove its definition in the header file, too.