summaryrefslogtreecommitdiff
path: root/plugins/warp/ui/shared/file.cpp
blob: 70a169fe30bdecf269517e5704ef9b78f3dc0301 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "file.h"

#include <QVBoxLayout>

FileWidget::FileWidget(QWidget* parent) : QWidget(parent)
{
	auto* layout = new QVBoxLayout(this);
	layout->setContentsMargins(0, 0, 0, 0);

	auto* splitter = new QSplitter(Qt::Horizontal, this);

	// Left side: List of chunks
	m_list = new QListWidget(this);
	m_list->setSelectionMode(QAbstractItemView::SingleSelection);
	m_list->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
	m_list->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
	m_list->setUniformItemSizes(true);
	connect(m_list, &QListWidget::itemSelectionChanged, this, &FileWidget::onListSelectionChanged);
	splitter->addWidget(m_list);

	// Right side: Chunk Widget
	m_chunkWidget = new ChunkWidget(this);
	splitter->addWidget(m_chunkWidget);

	splitter->setSizes({100, 900});
	layout->addWidget(splitter);
}

void FileWidget::setFile(Warp::Ref<Warp::File> file)
{
	m_file = file;
	m_list->clear();
	m_chunkWidget->setChunk(nullptr);
	m_currentChunks.clear();

	if (!m_file)
		return;

	m_currentChunks = m_file->GetChunks();
	for (size_t i = 0; i < m_currentChunks.size(); ++i)
	{
		auto* listItem = new QListWidgetItem(m_list);
		listItem->setText(QString("Chunk #%1").arg(i + 1));
		// Store the chunk index in the item's data for easy retrieval
		listItem->setData(Qt::UserRole, QVariant::fromValue(static_cast<qulonglong>(i)));
	}

	if (m_list->count() > 0)
		m_list->setCurrentRow(0);
}

void FileWidget::onListSelectionChanged()
{
	auto selectedItems = m_list->selectedItems();
	if (selectedItems.isEmpty())
	{
		m_chunkWidget->setChunk(nullptr);
		return;
	}

	auto* item = selectedItems.first();
	QVariant data = item->data(Qt::UserRole);
	if (data.isValid())
	{
		size_t index = data.value<qulonglong>();
		if (index < m_currentChunks.size())
		{
			m_chunkWidget->setChunk(m_currentChunks[index]);
		}
	}
}