Skip to content

Commit c01dc65

Browse files
committed
Better resizing of view widget
-Rename LV to TV since it's a QTreeView now not QListView -Added a custom class to handle resize event, keeping the type column constant and stretch the name column
1 parent a3104ba commit c01dc65

File tree

6 files changed

+83
-34
lines changed

6 files changed

+83
-34
lines changed

GensArchiveCleaner.pro

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ HEADERS += \
5050
GlitterLib/VertexFormat.h \
5151
GlitterLib/xncpminumum.h \
5252
customfilesystemmodel.h \
53+
customtreeview.h \
5354
gensarchivecleaner.h
5455

5556
SOURCES += \
@@ -79,6 +80,7 @@ SOURCES += \
7980
GlitterLib/VertexFormat.cpp \
8081
GlitterLib/xncpminumum.cpp \
8182
customfilesystemmodel.cpp \
83+
customtreeview.cpp \
8284
gensarchivecleaner.cpp \
8385
main.cpp
8486

customtreeview.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#include "customtreeview.h"
2+
3+
void CustomTreeView::resizeEvent(QResizeEvent *e)
4+
{
5+
updateColumnWidth();
6+
QTreeView::resizeEvent(e);
7+
}
8+
9+
void CustomTreeView::updateColumnWidth()
10+
{
11+
this->setColumnWidth(0, this->width() - this->columnWidth(2) - 30);
12+
}

customtreeview.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#ifndef CUSTOMTREEVIEW_H
2+
#define CUSTOMTREEVIEW_H
3+
4+
#include <QTreeView>
5+
6+
class CustomTreeView : public QTreeView
7+
{
8+
Q_OBJECT
9+
public:
10+
using QTreeView::QTreeView;
11+
void resizeEvent(QResizeEvent* e) override;
12+
13+
void updateColumnWidth();
14+
};
15+
16+
#endif // CUSTOMTREEVIEW_H

gensarchivecleaner.cpp

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ GensArchiveCleaner::GensArchiveCleaner(QWidget *parent)
4141
m_resourceModel->setNameFilters(resourceFilter);
4242
m_resourceModel->setNameFilterDisables(false);
4343
connect(m_resourceModel, &CustomFileSystemModel::directoryLoaded, this, &GensArchiveCleaner::resource_directoryLoaded);
44+
45+
ui->TV_Base->header()->setSectionResizeMode(QHeaderView::Fixed);
46+
ui->TV_Resource->header()->setSectionResizeMode(QHeaderView::Fixed);
4447
}
4548

4649
//---------------------------------------------------------------------------
@@ -91,7 +94,7 @@ void GensArchiveCleaner::on_PB_Copy_clicked()
9194
int fail = 0;
9295

9396
// Copy base files
94-
QModelIndexList const list = ui->LV_Base->selectionModel()->selectedIndexes();
97+
QModelIndexList const list = ui->TV_Base->selectionModel()->selectedIndexes();
9598
for (QModelIndex const& index : list)
9699
{
97100
QString const fileName = m_baseModel->fileName(index);
@@ -106,7 +109,7 @@ void GensArchiveCleaner::on_PB_Copy_clicked()
106109
}
107110

108111
// Copy resources
109-
QModelIndexList const list2 = ui->LV_Resource->selectionModel()->selectedIndexes();
112+
QModelIndexList const list2 = ui->TV_Resource->selectionModel()->selectedIndexes();
110113
for (QModelIndex const& index : list2)
111114
{
112115
QString const fileName = m_resourceModel->fileName(index);
@@ -136,7 +139,7 @@ void GensArchiveCleaner::on_PB_Copy_clicked()
136139
//---------------------------------------------------------------------------
137140
void GensArchiveCleaner::on_PB_DeleteBase_clicked()
138141
{
139-
QModelIndexList const list = ui->LV_Base->selectionModel()->selectedIndexes();
142+
QModelIndexList const list = ui->TV_Base->selectionModel()->selectedIndexes();
140143
if (list.isEmpty()) return;
141144

142145
QMessageBox::StandardButton resBtn = QMessageBox::Yes;
@@ -185,7 +188,7 @@ void GensArchiveCleaner::on_PB_Clean_clicked()
185188
//---------------------------------------------------------------------------
186189
void GensArchiveCleaner::on_PB_DeleteResource_clicked()
187190
{
188-
QModelIndexList const list = ui->LV_Resource->selectionModel()->selectedIndexes();
191+
QModelIndexList const list = ui->TV_Resource->selectionModel()->selectedIndexes();
189192
if (list.isEmpty()) return;
190193

191194
QMessageBox::StandardButton resBtn = QMessageBox::Yes;
@@ -213,14 +216,14 @@ void GensArchiveCleaner::watcher_directoryChanged(const QString &path)
213216
{
214217
ui->LE_Folder->setText("");
215218

216-
ui->LV_Base->setModel(Q_NULLPTR);
219+
ui->TV_Base->setModel(Q_NULLPTR);
217220
SetBaseCount(0);
218221
SetBaseSelected(0);
219222
SetBaseError(0);
220223
m_bases.clear();
221224
m_baseModel->clearList();
222225

223-
ui->LV_Resource->setModel(Q_NULLPTR);
226+
ui->TV_Resource->setModel(Q_NULLPTR);
224227
SetResourceCount(0);
225228
SetResourceSelected(0);
226229
SetResourceUnused(0);
@@ -242,7 +245,7 @@ void GensArchiveCleaner::base_directoryLoaded(const QString &path)
242245
// Parse files
243246
m_bases.clear();
244247
m_baseModel->clearList();
245-
ui->LV_Base->clearSelection();
248+
ui->TV_Base->clearSelection();
246249
for (int i = 0; i < count; i++)
247250
{
248251
QModelIndex index = m_baseModel->index(i, 0, m_baseModelIndex);
@@ -299,7 +302,7 @@ void GensArchiveCleaner::on_LV_Base_doubleClicked(const QModelIndex &index)
299302
//---------------------------------------------------------------------------
300303
void GensArchiveCleaner::base_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
301304
{
302-
QModelIndexList const list = ui->LV_Base->selectionModel()->selectedRows();
305+
QModelIndexList const list = ui->TV_Base->selectionModel()->selectedRows();
303306
SetBaseSelected(list.size());
304307

305308
// Retrive all resources of this base file
@@ -315,7 +318,7 @@ void GensArchiveCleaner::base_selectionChanged(const QItemSelection &selected, c
315318
}
316319

317320
// Select resrouces programatically
318-
QItemSelectionModel* selectionModel = ui->LV_Resource->selectionModel();
321+
QItemSelectionModel* selectionModel = ui->TV_Resource->selectionModel();
319322
selectionModel->clearSelection();
320323
QModelIndex topIndex;
321324
QModelIndex bottomIndex;
@@ -330,8 +333,8 @@ void GensArchiveCleaner::base_selectionChanged(const QItemSelection &selected, c
330333
}
331334

332335
// We scroll to bottom then top to have as many resources in view as possible
333-
ui->LV_Resource->scrollTo(bottomIndex);
334-
ui->LV_Resource->scrollTo(topIndex);
336+
ui->TV_Resource->scrollTo(bottomIndex);
337+
ui->TV_Resource->scrollTo(topIndex);
335338
}
336339

337340
//---------------------------------------------------------------------------
@@ -345,7 +348,7 @@ void GensArchiveCleaner::resource_directoryLoaded(const QString &path)
345348
// Parse files
346349
m_resources.clear();
347350
m_resourceModel->clearList();
348-
ui->LV_Resource->clearSelection();
351+
ui->TV_Resource->clearSelection();
349352
for (int i = 0; i < count; i++)
350353
{
351354
QModelIndex index = m_resourceModel->index(i, 0, m_resourceModelIndex);
@@ -382,7 +385,7 @@ void GensArchiveCleaner::on_LV_Resource_doubleClicked(const QModelIndex &index)
382385
//---------------------------------------------------------------------------
383386
void GensArchiveCleaner::resource_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
384387
{
385-
QModelIndexList const list = ui->LV_Resource->selectionModel()->selectedRows();
388+
QModelIndexList const list = ui->TV_Resource->selectionModel()->selectedRows();
386389
SetResourceSelected(list.size());
387390
}
388391

@@ -412,33 +415,33 @@ void GensArchiveCleaner::LoadDirectory()
412415
connect(m_watcher, &QFileSystemWatcher::directoryChanged, this, &GensArchiveCleaner::watcher_directoryChanged);
413416

414417
// Set base model
415-
if (!ui->LV_Base->model())
418+
if (!ui->TV_Base->model())
416419
{
417-
ui->LV_Base->setModel(m_baseModel);
418-
connect(ui->LV_Base->selectionModel(), &QItemSelectionModel::selectionChanged, this, &GensArchiveCleaner::base_selectionChanged);
420+
ui->TV_Base->setModel(m_baseModel);
421+
connect(ui->TV_Base->selectionModel(), &QItemSelectionModel::selectionChanged, this, &GensArchiveCleaner::base_selectionChanged);
419422
}
420423
m_baseModelIndex = m_baseModel->setRootPath(dir);
421-
ui->LV_Base->clearSelection();
422-
ui->LV_Base->setRootIndex(m_baseModelIndex);
423-
ui->LV_Base->sortByColumn(2, Qt::AscendingOrder);
424-
ui->LV_Base->setColumnWidth(0,300);
425-
ui->LV_Base->hideColumn(1);
426-
ui->LV_Base->hideColumn(3);
424+
ui->TV_Base->clearSelection();
425+
ui->TV_Base->setRootIndex(m_baseModelIndex);
426+
ui->TV_Base->sortByColumn(2, Qt::AscendingOrder);
427+
ui->TV_Base->setColumnWidth(0,300);
428+
ui->TV_Base->hideColumn(1);
429+
ui->TV_Base->hideColumn(3);
427430
SetBaseSelected(0);
428431

429432
// Set resource model
430-
if (!ui->LV_Resource->model())
433+
if (!ui->TV_Resource->model())
431434
{
432-
ui->LV_Resource->setModel(m_resourceModel);
433-
connect(ui->LV_Resource->selectionModel(), &QItemSelectionModel::selectionChanged, this, &GensArchiveCleaner::resource_selectionChanged);
435+
ui->TV_Resource->setModel(m_resourceModel);
436+
connect(ui->TV_Resource->selectionModel(), &QItemSelectionModel::selectionChanged, this, &GensArchiveCleaner::resource_selectionChanged);
434437
}
435438
m_resourceModelIndex = m_resourceModel->setRootPath(dir);
436-
ui->LV_Resource->clearSelection();
437-
ui->LV_Resource->setRootIndex(m_resourceModelIndex);
438-
ui->LV_Resource->sortByColumn(2, Qt::AscendingOrder);
439-
ui->LV_Resource->setColumnWidth(0,300);
440-
ui->LV_Resource->hideColumn(1);
441-
ui->LV_Resource->hideColumn(3);
439+
ui->TV_Resource->clearSelection();
440+
ui->TV_Resource->setRootIndex(m_resourceModelIndex);
441+
ui->TV_Resource->sortByColumn(2, Qt::AscendingOrder);
442+
ui->TV_Resource->setColumnWidth(0,300);
443+
ui->TV_Resource->hideColumn(1);
444+
ui->TV_Resource->hideColumn(3);
442445
SetResourceSelected(0);
443446

444447
qApp->processEvents();
@@ -522,6 +525,9 @@ void GensArchiveCleaner::CheckErrorAndUnused()
522525
// Reset these so only when both is true then this function is called again
523526
m_baseParsed = false;
524527
m_resourceParsed = false;
528+
529+
ui->TV_Base->updateColumnWidth();
530+
ui->TV_Resource->updateColumnWidth();
525531
}
526532

527533
//---------------------------------------------------------------------------
@@ -609,7 +615,6 @@ QStringList GensArchiveCleaner::GetBaseFileResources(const QString &fullName)
609615
{
610616
list << QString::fromStdString(str);
611617
}
612-
qDebug() << list;
613618
break;
614619
}
615620
case Base_ERROR: break;

gensarchivecleaner.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <QFileSystemWatcher>
99
#include <QMainWindow>
1010
#include <QMessageBox>
11+
#include <QScrollBar>
1112
#include <QSettings>
1213

1314
#include "customfilesystemmodel.h"

gensarchivecleaner.ui

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
</property>
6161
<layout class="QVBoxLayout" name="verticalLayout_2">
6262
<item>
63-
<widget class="QTreeView" name="LV_Base">
63+
<widget class="CustomTreeView" name="TV_Base">
6464
<property name="selectionMode">
6565
<enum>QAbstractItemView::ExtendedSelection</enum>
6666
</property>
@@ -76,6 +76,9 @@
7676
<attribute name="headerMinimumSectionSize">
7777
<number>5</number>
7878
</attribute>
79+
<attribute name="headerStretchLastSection">
80+
<bool>false</bool>
81+
</attribute>
7982
</widget>
8083
</item>
8184
<item>
@@ -158,7 +161,7 @@
158161
</property>
159162
<layout class="QVBoxLayout" name="verticalLayout_3">
160163
<item>
161-
<widget class="QTreeView" name="LV_Resource">
164+
<widget class="CustomTreeView" name="TV_Resource">
162165
<property name="selectionMode">
163166
<enum>QAbstractItemView::ExtendedSelection</enum>
164167
</property>
@@ -174,6 +177,9 @@
174177
<attribute name="headerMinimumSectionSize">
175178
<number>5</number>
176179
</attribute>
180+
<attribute name="headerStretchLastSection">
181+
<bool>false</bool>
182+
</attribute>
177183
</widget>
178184
</item>
179185
<item>
@@ -245,6 +251,13 @@
245251
</layout>
246252
</widget>
247253
</widget>
254+
<customwidgets>
255+
<customwidget>
256+
<class>CustomTreeView</class>
257+
<extends>QTreeView</extends>
258+
<header location="global">customtreeview.h</header>
259+
</customwidget>
260+
</customwidgets>
248261
<resources/>
249262
<connections/>
250263
</ui>

0 commit comments

Comments
 (0)