Merge pull request #7357 from Techjar/qt-memcard-manager-select-button

Qt/GCMemcardManager: Make slot and file selection more intuitive
This commit is contained in:
Pierre Bourdon 2018-08-27 13:35:38 +02:00 committed by GitHub
commit 62928de547
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 21 deletions

View File

@ -95,6 +95,8 @@ void GCMemcardManager::CreateWidgets()
slot_layout->addWidget(m_slot_stat_label[i], 2, 0); slot_layout->addWidget(m_slot_stat_label[i], 2, 0);
layout->addWidget(m_slot_group[i], 0, i * 2, 9, 1); layout->addWidget(m_slot_group[i], 0, i * 2, 9, 1);
UpdateSlotTable(i);
} }
layout->addWidget(m_select_button, 1, 1); layout->addWidget(m_select_button, 1, 1);
@ -134,10 +136,10 @@ void GCMemcardManager::ConnectWidgets()
void GCMemcardManager::SetActiveSlot(int slot) void GCMemcardManager::SetActiveSlot(int slot)
{ {
for (int i = 0; i < SLOT_COUNT; i++) for (int i = 0; i < SLOT_COUNT; i++)
m_slot_group[i]->setEnabled(i == slot); m_slot_table[i]->setEnabled(i == slot);
m_select_button->setText(slot == 0 ? QStringLiteral("<") : QStringLiteral(">")); m_select_button->setText(slot == 0 ? tr("Switch to B") : tr("Switch to A"));
m_copy_button->setText(slot == 0 ? QStringLiteral("Copy to B") : QStringLiteral("Copy to A")); m_copy_button->setText(slot == 0 ? tr("Copy to B") : tr("Copy to A"));
m_active_slot = slot; m_active_slot = slot;
@ -147,7 +149,7 @@ void GCMemcardManager::SetActiveSlot(int slot)
void GCMemcardManager::UpdateSlotTable(int slot) void GCMemcardManager::UpdateSlotTable(int slot)
{ {
m_slot_active_icons[m_active_slot].clear(); m_slot_active_icons[slot].clear();
m_slot_table[slot]->clear(); m_slot_table[slot]->clear();
m_slot_table[slot]->setColumnCount(6); m_slot_table[slot]->setColumnCount(6);
m_slot_table[slot]->verticalHeader()->setDefaultSectionSize(ROW_HEIGHT); m_slot_table[slot]->verticalHeader()->setDefaultSectionSize(ROW_HEIGHT);
@ -190,10 +192,10 @@ void GCMemcardManager::UpdateSlotTable(int slot)
QString block_count = QStringLiteral("%1").arg(memcard->DEntry_FirstBlock(file_index)); QString block_count = QStringLiteral("%1").arg(memcard->DEntry_FirstBlock(file_index));
auto* banner = new QTableWidgetItem; auto* banner = new QTableWidgetItem;
banner->setData(Qt::DecorationRole, GetBannerFromSaveFile(file_index)); banner->setData(Qt::DecorationRole, GetBannerFromSaveFile(file_index, slot));
banner->setFlags(banner->flags() ^ Qt::ItemIsEditable); banner->setFlags(banner->flags() ^ Qt::ItemIsEditable);
auto frames = GetIconFromSaveFile(file_index); auto frames = GetIconFromSaveFile(file_index, slot);
auto* icon = new QTableWidgetItem; auto* icon = new QTableWidgetItem;
icon->setData(Qt::DecorationRole, frames[0]); icon->setData(Qt::DecorationRole, frames[0]);
@ -202,7 +204,7 @@ void GCMemcardManager::UpdateSlotTable(int slot)
const auto speed = ((d.AnimSpeed[0] & 1) << 2) + (d.AnimSpeed[1] & 1); const auto speed = ((d.AnimSpeed[0] & 1) << 2) + (d.AnimSpeed[1] & 1);
m_slot_active_icons[m_active_slot].push_back({speed, frames}); m_slot_active_icons[slot].push_back({speed, frames});
table->setItem(i, 0, banner); table->setItem(i, 0, banner);
table->setItem(i, 1, create_item(title)); table->setItem(i, 1, create_item(title));
@ -418,9 +420,11 @@ void GCMemcardManager::DrawIcons()
m_current_frame++; m_current_frame++;
m_current_frame %= 15; m_current_frame %= 15;
int row = 0;
const auto column = 3; const auto column = 3;
for (auto& icon : m_slot_active_icons[m_active_slot]) for (int slot = 0; slot < SLOT_COUNT; slot++)
{
int row = 0;
for (auto& icon : m_slot_active_icons[slot])
{ {
int frame = (m_current_frame / 3 - icon.first) % icon.second.size(); int frame = (m_current_frame / 3 - icon.first) % icon.second.size();
@ -428,14 +432,15 @@ void GCMemcardManager::DrawIcons()
item->setData(Qt::DecorationRole, icon.second[frame]); item->setData(Qt::DecorationRole, icon.second[frame]);
item->setFlags(item->flags() ^ Qt::ItemIsEditable); item->setFlags(item->flags() ^ Qt::ItemIsEditable);
m_slot_table[m_active_slot]->setItem(row, column, item); m_slot_table[slot]->setItem(row, column, item);
row++; row++;
} }
}
} }
QPixmap GCMemcardManager::GetBannerFromSaveFile(int file_index) QPixmap GCMemcardManager::GetBannerFromSaveFile(int file_index, int slot)
{ {
auto& memcard = m_slot_memcard[m_active_slot]; auto& memcard = m_slot_memcard[slot];
std::vector<u32> pxdata(BANNER_WIDTH * IMAGE_HEIGHT); std::vector<u32> pxdata(BANNER_WIDTH * IMAGE_HEIGHT);
@ -449,9 +454,9 @@ QPixmap GCMemcardManager::GetBannerFromSaveFile(int file_index)
return QPixmap::fromImage(image); return QPixmap::fromImage(image);
} }
std::vector<QPixmap> GCMemcardManager::GetIconFromSaveFile(int file_index) std::vector<QPixmap> GCMemcardManager::GetIconFromSaveFile(int file_index, int slot)
{ {
auto& memcard = m_slot_memcard[m_active_slot]; auto& memcard = m_slot_memcard[slot];
std::vector<u32> pxdata(BANNER_WIDTH * IMAGE_HEIGHT); std::vector<u32> pxdata(BANNER_WIDTH * IMAGE_HEIGHT);
std::vector<u8> anim_delay(ANIM_MAX_FRAMES); std::vector<u8> anim_delay(ANIM_MAX_FRAMES);

View File

@ -46,8 +46,8 @@ private:
void FixChecksums(); void FixChecksums();
void DrawIcons(); void DrawIcons();
QPixmap GetBannerFromSaveFile(int file_index); QPixmap GetBannerFromSaveFile(int file_index, int slot);
std::vector<QPixmap> GetIconFromSaveFile(int file_index); std::vector<QPixmap> GetIconFromSaveFile(int file_index, int slot);
// Actions // Actions
QPushButton* m_select_button; QPushButton* m_select_button;