Files
SSUP/Editor/editor.cpp
2026-03-12 21:08:35 +01:00

126 lines
5.4 KiB
C++

#include <cstdio>
#include <SDL2/SDL.h>
#include <bits/stdc++.h>
#include "imgui.h"
#include "ssup.h"
using namespace std;
void renderPageEditor(){
//static char buffer[4][22];
static uint8_t drawBuffer[32][16];
static char label[64];
static bool drawMode = false;
//::SetNextWindowPos(ImGui::GetMainViewport()->GetCenter(), ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
//ImGui::Begin("Page Editor", NULL,
// ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize | (drawMode ? ImGuiWindowFlags_NoMove : 0));
if (ImGui::BeginTabItem(appLang == LANG::ENGLISH ? "Page Editor" : "Seiten Editor")){
ImGui::BeginDisabled(currentPage <= 0);
if (ImGui::ArrowButton("###PREVPAGE", ImGuiDir_Left)) currentPage--;
ImGui::EndDisabled();
ImGui::SameLine();
ImGui::Text(appLang == LANG::ENGLISH ? "Page %d" : "Seite %d", currentPage);
ImGui::SameLine();
ImGui::BeginDisabled(currentPage >= (int)pages.size() - 1);
if (ImGui::ArrowButton("###NEXTPAGE", ImGuiDir_Right)) currentPage++;
ImGui::EndDisabled();
if (pages.size() == 0){
ImGui::SeparatorText("###emptyText");
ImGui::PushStyleColor(ImGuiCol_Text, 0xFF2222FF);
ImGui::Text(appLang == LANG::ENGLISH ?
"Empty page table!\nPlease add a text or image page to edit it here.\nIf you're stuck, read the guide:" :
"Keine Seiten!\nBitte füge Text oder Bild hinzu um diese hier zu bearbeiten\nWenn du bilfe brauchst, ließ die Anleitung:");
ImGui::PopStyleColor();
ImGui::TextLinkOpenURL(appLang == LANG::ENGLISH ? "here" : "hier", "https://weingardt.dev/ssup");
}
else if (pages[currentPage]->type == PAGETYPE::TEXT){
char** buffer = (char**)pages[currentPage]->data;
bool focus = false;
sprintf(label, "%dx%d Text", config.textx, config.texty);
ImGui::SeparatorText(label);
ImGui::PushStyleVarY(ImGuiStyleVar_ItemSpacing, 1);
for (int i = 0; i < config.texty; i++){
int length = config.textx - (int)strlen(buffer[i]);
sprintf(label, "###TEXTEDIT%d", i);
bool error = false;
for (int j = 0; j < (int)strlen(buffer[i]); j++) if (!isascii(buffer[i][j])) error = true;
if (error) ImGui::PushStyleColor(ImGuiCol_FrameBg, 0xFF0000FF);
ImGui::PushItemFlag(ImGuiTabItemFlags_Leading, focus);
ImGui::PushItemWidth(ImGui::CalcTextSize("a").x * (config.textx + 1));
if (ImGui::InputText(label, buffer[i], config.textx + 1, ImGuiInputTextFlags_EnterReturnsTrue)) focus = true;
ImGui::PopItemFlag();
ImGui::SameLine();
if (error) {
ImGui::PopStyleColor();
ImGui::Text(appLang == LANG::ENGLISH ? "Illegal Character!" : "Ungültiger Buchstabe!");
} else ImGui::Text(appLang == LANG::ENGLISH ? "%d char%s left" : "%d Buchstabe%s übrig", length, length == 1 ? "" : (appLang == LANG::ENGLISH ? "s" : "n"));
}
ImGui::PopStyleVar();
drawMode = false;
} else {
// REWORK!
sprintf(label, "%dx%d %s", config.imagex, config.imagey, appLang == LANG::ENGLISH ? "Image" : "Bild");
ImGui::SeparatorText(label);
const int SIZE = 4;
ImVec2 cursor = ImGui::GetCursorScreenPos();
ImVec2 size = ImVec2(128*SIZE, 32*SIZE);
ImVec2 mouse = ImGui::GetMousePos();
ImGui::Dummy(size);
ImDrawList* list = ImGui::GetWindowDrawList();
list->AddRectFilled(cursor, ImVec2(size.x + cursor.x, size.y + cursor.y), 0xFFFFFFFF);
list->AddRect(cursor, ImVec2(size.x + cursor.x, size.y + cursor.y), ImGui::GetColorU32(ImGui::GetStyleColorVec4(ImGuiCol_Border)));
for (int y = 0; y < 32; y++){
for (int x = 0; x < 128; x++){
if (((drawBuffer[y][x / 16] >> (x & 0b111)) & 1) == 1){
list->AddRectFilled(ImVec2(cursor.x + (x * SIZE), cursor.y + (y * SIZE)),
ImVec2(cursor.x + (x * SIZE) + SIZE, cursor.y + (y * SIZE) + SIZE), 0xFF000000);
}
}
}
ImVec2 mousePreview = ImVec2((int)((((int)mouse.x) / SIZE) * SIZE), (int)((((int)mouse.y) / 4) * 4));
if (mousePreview.x > cursor.x && mousePreview.x < size.x + cursor.x &&
mousePreview.y > cursor.y && mousePreview.y < size.y + cursor.y){
list->AddRectFilled(mousePreview, ImVec2(mousePreview.x + SIZE, mousePreview.y + SIZE) , 0x55000000);
//SDL_ShowCursor(false);
drawMode = true;
} else {
//SDL_ShowCursor(true);
drawMode = false;
}
//list->PushClipRect(cursor, ImVec2(size.x + cursor.x, size.y + cursor.y), true);
}
ImGui::EndTabItem();
//ImGui::End();
}
}