bsnes/higan/target-bsnes/tools/manifest-viewer.cpp

55 lines
2.2 KiB
C++

auto ManifestViewer::create() -> void {
setIcon(Icon::Emblem::Text);
setText("Manifest Viewer");
layout.setPadding(5);
manifestLabel.setText("Manifest:");
manifestOption.onChange([&] { selectManifest(); });
manifestSpacer.setColor({192, 192, 192});
#if 0 && defined(Hiro_SourceEdit)
manifestView.setFont(Font().setFamily(Font::Mono).setSize(10));
#else
manifestView.setFont(Font().setFamily(Font::Mono));
#endif
manifestView.setEditable(false);
manifestView.setWordWrap(false);
typeIcon.setIcon(Icon::Device::Storage);
nameLabel.setText("...");
}
auto ManifestViewer::loadManifest() -> void {
manifestOption.reset();
manifestView.setText("");
if(!emulator->loaded()) return;
auto manifests = emulator->manifests();
auto titles = emulator->titles();
for(uint offset : range(manifests.size())) {
ComboButtonItem item{&manifestOption};
item.setProperty("manifest", manifests[offset]);
item.setText(titles[offset]);
bool verified = false;
if(offset == 0) verified = program.superFamicom.verified;
if(offset == 1 && program.gameBoy) verified = program.gameBoy.verified;
if(offset == 1 && program.bsMemory) verified = program.bsMemory.verified;
if(offset == 1 && program.sufamiTurboA) verified = program.sufamiTurboA.verified;
if(offset == 2 && program.sufamiTurboB) verified = program.sufamiTurboB.verified;
item.setIcon(verified ? (image)Icon::Emblem::Program : (image)Icon::Emblem::Binary);
}
manifestOption.doChange();
}
auto ManifestViewer::selectManifest() -> void {
auto selected = manifestOption.selected();
uint offset = selected->offset();
manifestView.setText(selected.property("manifest"));
string location;
if(offset == 0) location = program.superFamicom.location;
if(offset == 1 && program.gameBoy) location = program.gameBoy.location;
if(offset == 1 && program.bsMemory) location = program.bsMemory.location;
if(offset == 1 && program.sufamiTurboA) location = program.sufamiTurboA.location;
if(offset == 2 && program.sufamiTurboB) location = program.sufamiTurboB.location;
typeIcon.setIcon(location.endsWith("/") ? (image)Icon::Action::Open : (image)Icon::Emblem::File);
nameLabel.setText(location.trimRight("/", 1L));
}