Compare commits

..

No commits in common. "695e7a4561e2dbffaeaa6c41b01c12713f753161" and "7e3e0461097fb87807237e5494f8cd6ba289dd87" have entirely different histories.

5 changed files with 29 additions and 39 deletions

View File

@ -4,11 +4,10 @@
* Add PaletteV5 to accommodate namespace change.
* Add TileSheetV5. TileSheetV5 retains the bpp field for the sake of
CompactTileSheet, but always store it pixel as 8 bpp for itself.
* Replace file picker combo boxes with a browse button and file picker, and
support for dragging files from the project explorer.
* Replace file picker combo boxes with support for dragging files from the
project explorer.
* Add ability to create directories.
* Add ability to add files to specific directories.
* Add ability to delete files from the project explorer.
* Ctrl-<num key> keyboard shortcuts for jumping between tabs.
* Fix Palette Editor to ignore keyboard input when popups are open.
* Palette Editor move color mechanism now uses drag and drop.

View File

@ -9,10 +9,7 @@
namespace nostalgia::gfx {
MoveColorCommand::MoveColorCommand(
Palette &pal,
size_t const page,
size_t const srcIdx,
size_t const dstIdx) noexcept:
Palette &pal, size_t page, size_t srcIdx, size_t dstIdx) noexcept:
m_pal(pal),
m_page(page),
m_srcIdx(srcIdx),
@ -32,18 +29,10 @@ ox::Error MoveColorCommand::undo() noexcept {
return {};
}
void MoveColorCommand::moveColor(
size_t const srcIdx, size_t const dstIdx) noexcept {
{
auto const c = color(m_pal, m_page, srcIdx);
std::ignore = colors(m_pal, m_page).erase(srcIdx);
colors(m_pal, m_page).emplace(dstIdx, c);
}
{
auto name = std::move(m_pal.colorNames[srcIdx]);
std::ignore = m_pal.colorNames.erase(srcIdx);
m_pal.colorNames.emplace(dstIdx, std::move(name));
}
void MoveColorCommand::moveColor(size_t srcIdx, size_t dstIdx) noexcept {
auto const c = color(m_pal, m_page, srcIdx);
std::ignore = colors(m_pal, m_page).erase(srcIdx);
colors(m_pal, m_page).emplace(dstIdx, c);
}
}

View File

@ -23,15 +23,6 @@ namespace nostalgia::gfx {
namespace ig = studio::ig;
struct ColorDragDrop {
static constexpr auto TypeName = "nostalgia.gfx.ColorDragDrop";
static constexpr auto TypeVersion = 1;
uint32_t i{};
};
OX_MODEL_BEGIN(ColorDragDrop)
OX_MODEL_FIELD(i)
OX_MODEL_END()
void PaletteEditorImGui::PageRenameDialog::draw(turbine::Context &tctx) noexcept {
if (!m_show) {
@ -134,6 +125,26 @@ void PaletteEditorImGui::drawColorsEditor() noexcept {
m_selectedColorRow = ox::min(colorCnt(m_pal, m_page) - 1, m_selectedColorRow);
colorEditor = m_selectedColorRow < colorCnt(m_pal, m_page);
}
ImGui::SameLine();
ImGui::BeginDisabled(m_selectedColorRow <= 0);
{
if (ImGui::Button("Move Up", sz)) {
std::ignore = pushCommand<MoveColorCommand>(
m_pal, m_page, m_selectedColorRow, m_selectedColorRow - 1);
--m_selectedColorRow;
}
}
ImGui::EndDisabled();
ImGui::SameLine();
ImGui::BeginDisabled(m_selectedColorRow >= colorCnt(m_pal, m_page) - 1);
{
if (ImGui::Button("Move Down", sz)) {
std::ignore = pushCommand<MoveColorCommand>(
m_pal, m_page, m_selectedColorRow, m_selectedColorRow + 1);
++m_selectedColorRow;
}
}
ImGui::EndDisabled();
}
ImGui::EndDisabled();
}
@ -168,16 +179,6 @@ void PaletteEditorImGui::drawColorsEditor() noexcept {
"##ColorRow", i == m_selectedColorRow, ImGuiSelectableFlags_SpanAllColumns)) {
m_selectedColorRow = i;
}
std::ignore = ig::dragDropSource([this, i] {
ImGui::Text("%s", m_pal.colorNames[i].c_str());
return ig::setDragDropPayload(ColorDragDrop{i});
}, ImGuiDragDropFlags_SourceAllowNullID);
if (ig::DragDropTarget const d; d) {
auto const [src, err] = ig::getDragDropPayload<ColorDragDrop>();
if (!err) {
std::ignore = pushCommand<MoveColorCommand>(m_pal, m_page, src.i, i);
}
}
++i;
}
}

View File

@ -5,6 +5,7 @@
#pragma once
#include <ox/event/signal.hpp>
#include <ox/std/memory.hpp>
#include <studio/filetreemodel.hpp>
#include <studio/widget.hpp>

View File

@ -35,7 +35,7 @@ Project::Project(keel::Context &ctx, ox::String path, ox::StringViewCR projectDa
m_fs(*m_ctx.rom) {
oxTracef("studio", "Project: {}", m_path);
generateTypes(m_typeStore);
if constexpr(ox::defines::Debug) {
if (ox::defines::Debug) {
OX_THROW_ERROR(writeTypeStore());
}
buildFileIndex();