Expand GraphicsEditor import functionality

This commit is contained in:
scawful
2023-07-09 10:36:39 -04:00
parent 5852213f49
commit 003e3d5ab4
2 changed files with 84 additions and 25 deletions

View File

@@ -8,6 +8,7 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "app/gfx/bitmap.h"
#include "app/gfx/snes_tile.h"
#include "app/gui/canvas.h"
#include "app/gui/input.h"
#include "app/rom.h"
@@ -17,22 +18,35 @@ namespace app {
namespace editor {
absl::Status GraphicsEditor::Update() {
DrawImport();
if (ImGui::BeginTable("#gfxEditTable", 2, gfx_edit_flags, ImVec2(0, 0))) {
ImGui::TableSetupColumn("Bin Importer", ImGuiTableColumnFlags_WidthStretch,
ImGui::GetContentRegionAvail().x);
ImGui::TableSetupColumn("Graphics Manager");
ImGui::TableHeadersRow();
ImGui::TableNextRow();
ImGui::TableNextColumn();
RETURN_IF_ERROR(DrawImport())
ImGui::TableNextColumn();
ImGui::EndTable();
}
return absl::OkStatus();
}
absl::Status GraphicsEditor::DrawImport() {
static int offset = 0;
static int size = 0;
static char filePath[256] = "";
static bool open = false;
ImGui::SetNextItemWidth(350.f);
ImGui::InputText("File", filePath, sizeof(filePath));
// Open the file dialog when the user clicks the "Browse" button
if (ImGui::Button("Browse")) {
ImGuiFileDialog::Instance()->OpenDialog("ImportDlgKey", "Choose File",
".bin\0", ".");
".bin\0.hex\0", ".");
}
// Draw the file dialog
@@ -41,42 +55,60 @@ absl::Status GraphicsEditor::DrawImport() {
if (ImGuiFileDialog::Instance()->IsOk()) {
strncpy(filePath, ImGuiFileDialog::Instance()->GetFilePathName().c_str(),
sizeof(filePath));
RETURN_IF_ERROR(temp_rom_.LoadFromFile(filePath))
open = true;
}
// Close the modal
ImGuiFileDialog::Instance()->Close();
}
gui::InputHex("Offset", &offset);
if (open) {
static MemoryEditor mem_edit;
mem_edit.DrawWindow(filePath, (void *)&temp_rom_, temp_rom_.size());
}
gui::InputHex("Offset", &current_offset_);
gui::InputHex("Size ", &size);
if (ImGui::Button("Super Donkey")) {
current_offset_ = 0x98219;
size = 0x30000;
}
if (ImGui::Button("Import")) {
if (strlen(filePath) > 0) {
// Add your importing code here, using filePath and offset as parameters
RETURN_IF_ERROR(DecompressImportData(filePath, offset, size))
RETURN_IF_ERROR(DecompressImportData(size))
} else {
// Show an error message if no file has been selected
ImGui::Text("Please select a file before importing.");
}
}
import_canvas_.DrawBackground(ImVec2(0x100 + 1, (8192 * 2) + 1));
import_canvas_.DrawContextMenu();
import_canvas_.DrawBitmap(bitmap_, 2, gfx_loaded_);
import_canvas_.DrawTileSelector(32);
import_canvas_.DrawGrid(32.0f);
import_canvas_.DrawOverlay();
if (ImGuiID child_id = ImGui::GetID((void *)(intptr_t)2);
ImGui::BeginChild(child_id, ImGui::GetContentRegionAvail(), true,
ImGuiWindowFlags_AlwaysVerticalScrollbar)) {
import_canvas_.DrawBackground(ImVec2(0x100 + 1, (8192 * 2) + 1));
import_canvas_.DrawContextMenu();
import_canvas_.DrawBitmap(bitmap_, 2, gfx_loaded_);
import_canvas_.DrawTileSelector(32);
import_canvas_.DrawGrid(32.0f);
import_canvas_.DrawOverlay();
}
ImGui::EndChild();
return absl::OkStatus();
}
absl::Status GraphicsEditor::DecompressImportData(char *filePath, int offset,
int size) {
RETURN_IF_ERROR(temp_rom.LoadFromFile(filePath))
ASSIGN_OR_RETURN(import_data_, temp_rom.DecompressGraphics(offset, size))
absl::Status GraphicsEditor::DecompressImportData(int size) {
ASSIGN_OR_RETURN(import_data_, temp_rom_.Decompress(current_offset_, size))
std::cout << "Size of import data" << import_data_.size() << std::endl;
bitmap_.Create(core::kTilesheetWidth, core::kTilesheetHeight * 0x10,
core::kTilesheetDepth, import_data_.data());
Bytes new_sheet;
bitmap_.Create(core::kTilesheetWidth, core::kTilesheetHeight,
core::kTilesheetDepth, import_data_);
rom_.RenderBitmap(&bitmap_);
gfx_loaded_ = true;