Improve AssemblyEditor class
This commit is contained in:
@@ -1,13 +1,20 @@
|
|||||||
#include "assembly_editor.h"
|
#include "assembly_editor.h"
|
||||||
|
|
||||||
|
#include "core/constants.h"
|
||||||
|
|
||||||
namespace yaze {
|
namespace yaze {
|
||||||
namespace app {
|
namespace app {
|
||||||
namespace editor {
|
namespace editor {
|
||||||
|
|
||||||
void AssemblyEditor::Update() {
|
void AssemblyEditor::Update() {
|
||||||
SetEditorText();
|
|
||||||
auto cpos = text_editor_.GetCursorPosition();
|
auto cpos = text_editor_.GetCursorPosition();
|
||||||
ImGui::Begin("ASM Editor", &file_is_loaded_);
|
ImGui::Begin("ASM Editor", &file_is_loaded_, ImGuiWindowFlags_MenuBar);
|
||||||
|
MENU_BAR()
|
||||||
|
DrawFileMenu();
|
||||||
|
DrawEditMenu();
|
||||||
|
END_MENU_BAR()
|
||||||
|
|
||||||
|
SetEditorText();
|
||||||
ImGui::Text("%6d/%-6d %6d lines | %s | %s | %s | %s", cpos.mLine + 1,
|
ImGui::Text("%6d/%-6d %6d lines | %s | %s | %s | %s", cpos.mLine + 1,
|
||||||
cpos.mColumn + 1, text_editor_.GetTotalLines(),
|
cpos.mColumn + 1, text_editor_.GetTotalLines(),
|
||||||
text_editor_.IsOverwrite() ? "Ovr" : "Ins",
|
text_editor_.IsOverwrite() ? "Ovr" : "Ins",
|
||||||
@@ -19,10 +26,56 @@ void AssemblyEditor::Update() {
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssemblyEditor::ChangeActiveFile(const std::string & filename) {
|
void AssemblyEditor::ChangeActiveFile(const std::string& filename) {
|
||||||
current_file_ = filename;
|
current_file_ = filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AssemblyEditor::DrawFileMenu() {
|
||||||
|
if (ImGui::BeginMenu("File")) {
|
||||||
|
if (ImGui::MenuItem("Open", "Ctrl+O")) {
|
||||||
|
ImGuiFileDialog::Instance()->OpenDialog(
|
||||||
|
"ChooseASMFileDlg", "Open ASM file", ".asm,.txt", ".");
|
||||||
|
}
|
||||||
|
if (ImGui::MenuItem("Save", "Ctrl+S")) {
|
||||||
|
// TODO: Implement this
|
||||||
|
}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ImGuiFileDialog::Instance()->Display("ChooseASMFileDlg")) {
|
||||||
|
if (ImGuiFileDialog::Instance()->IsOk()) {
|
||||||
|
ChangeActiveFile(ImGuiFileDialog::Instance()->GetFilePathName());
|
||||||
|
}
|
||||||
|
ImGuiFileDialog::Instance()->Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssemblyEditor::DrawEditMenu() {
|
||||||
|
if (ImGui::BeginMenu("Edit")) {
|
||||||
|
if (ImGui::MenuItem("Undo", "Ctrl+Z")) {
|
||||||
|
text_editor_.Undo();
|
||||||
|
}
|
||||||
|
if (ImGui::MenuItem("Redo", "Ctrl+Y")) {
|
||||||
|
text_editor_.Redo();
|
||||||
|
}
|
||||||
|
ImGui::Separator();
|
||||||
|
if (ImGui::MenuItem("Cut", "Ctrl+X")) {
|
||||||
|
text_editor_.Cut();
|
||||||
|
}
|
||||||
|
if (ImGui::MenuItem("Copy", "Ctrl+C")) {
|
||||||
|
text_editor_.Copy();
|
||||||
|
}
|
||||||
|
if (ImGui::MenuItem("Paste", "Ctrl+V")) {
|
||||||
|
text_editor_.Paste();
|
||||||
|
}
|
||||||
|
ImGui::Separator();
|
||||||
|
if (ImGui::MenuItem("Find", "Ctrl+F")) {
|
||||||
|
// TODO: Implement this.
|
||||||
|
}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AssemblyEditor::SetEditorText() {
|
void AssemblyEditor::SetEditorText() {
|
||||||
if (!file_is_loaded_) {
|
if (!file_is_loaded_) {
|
||||||
std::ifstream t(current_file_);
|
std::ifstream t(current_file_);
|
||||||
@@ -30,8 +83,8 @@ void AssemblyEditor::SetEditorText() {
|
|||||||
std::string str((std::istreambuf_iterator<char>(t)),
|
std::string str((std::istreambuf_iterator<char>(t)),
|
||||||
std::istreambuf_iterator<char>());
|
std::istreambuf_iterator<char>());
|
||||||
text_editor_.SetText(str);
|
text_editor_.SetText(str);
|
||||||
|
file_is_loaded_ = true;
|
||||||
}
|
}
|
||||||
file_is_loaded_ = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ class AssemblyEditor {
|
|||||||
void ChangeActiveFile(const std::string &);
|
void ChangeActiveFile(const std::string &);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void DrawFileMenu();
|
||||||
|
void DrawEditMenu();
|
||||||
void SetEditorText();
|
void SetEditorText();
|
||||||
|
|
||||||
std::string current_file_;
|
std::string current_file_;
|
||||||
|
|||||||
@@ -23,13 +23,6 @@ Editor::Editor() {
|
|||||||
asm_editor_.SetLanguageDefinition(gui::widgets::GetAssemblyLanguageDef());
|
asm_editor_.SetLanguageDefinition(gui::widgets::GetAssemblyLanguageDef());
|
||||||
asm_editor_.SetPalette(TextEditor::GetDarkPalette());
|
asm_editor_.SetPalette(TextEditor::GetDarkPalette());
|
||||||
|
|
||||||
current_set_.bits_per_pixel_ = 4;
|
|
||||||
current_set_.pc_tiles_location_ = 0x80000;
|
|
||||||
current_set_.SNESTilesLocation = 0x0000;
|
|
||||||
current_set_.length_ = 28672;
|
|
||||||
current_set_.pc_palette_location_ = 906022;
|
|
||||||
current_set_.SNESPaletteLocation = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
current_palette_[i].x = (i * 0.21f);
|
current_palette_[i].x = (i * 0.21f);
|
||||||
current_palette_[i].y = (i * 0.21f);
|
current_palette_[i].y = (i * 0.21f);
|
||||||
@@ -68,10 +61,8 @@ void Editor::UpdateScreen() {
|
|||||||
DrawProjectEditor();
|
DrawProjectEditor();
|
||||||
DrawOverworldEditor();
|
DrawOverworldEditor();
|
||||||
DrawDungeonEditor();
|
DrawDungeonEditor();
|
||||||
DrawgfxEditor();
|
DrawGraphicsEditor();
|
||||||
DrawSpriteEditor();
|
DrawSpriteEditor();
|
||||||
DrawScreenEditor();
|
|
||||||
DrawHUDEditor();
|
|
||||||
END_TAB_BAR()
|
END_TAB_BAR()
|
||||||
|
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
@@ -134,7 +125,7 @@ void Editor::DrawEditMenu() const {
|
|||||||
if (ImGui::MenuItem("Undo", "Ctrl+Z")) {
|
if (ImGui::MenuItem("Undo", "Ctrl+Z")) {
|
||||||
// TODO: Implement this
|
// TODO: Implement this
|
||||||
}
|
}
|
||||||
if (ImGui::MenuItem("Undo", "Ctrl+Y")) {
|
if (ImGui::MenuItem("Redo", "Ctrl+Y")) {
|
||||||
// TODO: Implement this
|
// TODO: Implement this
|
||||||
}
|
}
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
@@ -176,7 +167,6 @@ void Editor::DrawViewMenu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (show_asm_editor) {
|
if (show_asm_editor) {
|
||||||
assembly_editor_.ChangeActiveFile("assets/bunnyhood.asm");
|
|
||||||
assembly_editor_.Update();
|
assembly_editor_.Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,7 +278,6 @@ void Editor::DrawProjectEditor() {
|
|||||||
static ImVector<ImVec2> points;
|
static ImVector<ImVec2> points;
|
||||||
static ImVec2 scrolling(0.0f, 0.0f);
|
static ImVec2 scrolling(0.0f, 0.0f);
|
||||||
static bool opt_enable_context_menu = true;
|
static bool opt_enable_context_menu = true;
|
||||||
static bool opt_enable_grid = true;
|
|
||||||
ImVec2 canvas_p0 = ImGui::GetCursorScreenPos();
|
ImVec2 canvas_p0 = ImGui::GetCursorScreenPos();
|
||||||
auto canvas_sz = ImVec2(
|
auto canvas_sz = ImVec2(
|
||||||
512 + 1, ImGui::GetContentRegionAvail().y + (tilesheet_offset * 256));
|
512 + 1, ImGui::GetContentRegionAvail().y + (tilesheet_offset * 256));
|
||||||
@@ -348,21 +337,6 @@ void Editor::DrawProjectEditor() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw the tile grid
|
|
||||||
if (opt_enable_grid) {
|
|
||||||
const float GRID_STEP = 32.0f;
|
|
||||||
for (float x = fmodf(scrolling.x, GRID_STEP); x < canvas_sz.x;
|
|
||||||
x += GRID_STEP)
|
|
||||||
draw_list->AddLine(ImVec2(canvas_p0.x + x, canvas_p0.y),
|
|
||||||
ImVec2(canvas_p0.x + x, canvas_p1.y),
|
|
||||||
IM_COL32(200, 200, 200, 40));
|
|
||||||
for (float y = fmodf(scrolling.y, GRID_STEP); y < canvas_sz.y;
|
|
||||||
y += GRID_STEP)
|
|
||||||
draw_list->AddLine(ImVec2(canvas_p0.x, canvas_p0.y + y),
|
|
||||||
ImVec2(canvas_p1.x, canvas_p0.y + y),
|
|
||||||
IM_COL32(200, 200, 200, 40));
|
|
||||||
}
|
|
||||||
|
|
||||||
draw_list->PopClipRect();
|
draw_list->PopClipRect();
|
||||||
|
|
||||||
ImGui::EndTable();
|
ImGui::EndTable();
|
||||||
@@ -423,7 +397,7 @@ void Editor::DrawDungeonEditor() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Editor::DrawgfxEditor() {
|
void Editor::DrawGraphicsEditor() {
|
||||||
if (ImGui::BeginTabItem("Graphics")) {
|
if (ImGui::BeginTabItem("Graphics")) {
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
}
|
}
|
||||||
@@ -435,18 +409,6 @@ void Editor::DrawSpriteEditor() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Editor::DrawScreenEditor() {
|
|
||||||
if (ImGui::BeginTabItem("Screens")) {
|
|
||||||
ImGui::EndTabItem();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Editor::DrawHUDEditor() {
|
|
||||||
if (ImGui::BeginTabItem("HUD")) {
|
|
||||||
ImGui::EndTabItem();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace editor
|
} // namespace editor
|
||||||
} // namespace app
|
} // namespace app
|
||||||
} // namespace yaze
|
} // namespace yaze
|
||||||
@@ -38,17 +38,13 @@ class Editor {
|
|||||||
void DrawProjectEditor();
|
void DrawProjectEditor();
|
||||||
void DrawOverworldEditor();
|
void DrawOverworldEditor();
|
||||||
void DrawDungeonEditor();
|
void DrawDungeonEditor();
|
||||||
void DrawgfxEditor();
|
void DrawGraphicsEditor();
|
||||||
void DrawSpriteEditor();
|
void DrawSpriteEditor();
|
||||||
void DrawScreenEditor();
|
|
||||||
void DrawHUDEditor();
|
|
||||||
|
|
||||||
bool is_loaded_ = true;
|
bool is_loaded_ = true;
|
||||||
bool asm_is_loaded = false;
|
bool asm_is_loaded = false;
|
||||||
|
|
||||||
rom::ROM rom_;
|
rom::ROM rom_;
|
||||||
gfx::TilePreset current_set_;
|
|
||||||
|
|
||||||
TextEditor asm_editor_;
|
TextEditor asm_editor_;
|
||||||
AssemblyEditor assembly_editor_;
|
AssemblyEditor assembly_editor_;
|
||||||
OverworldEditor overworld_editor_;
|
OverworldEditor overworld_editor_;
|
||||||
|
|||||||
Reference in New Issue
Block a user