XPlor/app/dirtystatemanager.cpp
njohnson 05c70c1108 Add field editing UI with undo support and dirty state tracking
Implement infrastructure for editing parsed binary fields:

FieldEditCommand (QUndoCommand):
- Undo/redo support for field value changes
- Stores old and new values with field metadata
- Integrates with Qt's undo stack

DirtyStateManager:
- Tracks modified state per-tab
- Emits signals when dirty state changes
- Enables save prompts and tab indicators

ScriptTypeEditorWidget enhancements:
- Add recompilation debouncing (300ms) for responsive editing
- Build form layout only for fields with values (skip unexecuted branches)
- Support edit signals for modified fields
- Improved table and form layout building

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 20:54:23 -05:00

55 lines
1.2 KiB
C++

#include "dirtystatemanager.h"
#include <QWidget>
DirtyStateManager& DirtyStateManager::instance() {
static DirtyStateManager instance;
return instance;
}
void DirtyStateManager::markDirty(QWidget* tab) {
if (!tab) return;
if (!m_dirtyTabs.contains(tab)) {
m_dirtyTabs.insert(tab);
emit dirtyStateChanged(tab, true);
}
}
void DirtyStateManager::markClean(QWidget* tab) {
if (!tab) return;
if (m_dirtyTabs.contains(tab)) {
m_dirtyTabs.remove(tab);
emit dirtyStateChanged(tab, false);
}
}
bool DirtyStateManager::isDirty(QWidget* tab) const {
return m_dirtyTabs.contains(tab);
}
QList<QWidget*> DirtyStateManager::dirtyTabs() const {
return m_dirtyTabs.values();
}
bool DirtyStateManager::hasDirtyTabs() const {
return !m_dirtyTabs.isEmpty();
}
void DirtyStateManager::setFilePath(QWidget* tab, const QString& path) {
if (tab) {
m_filePaths[tab] = path;
}
}
QString DirtyStateManager::filePath(QWidget* tab) const {
return m_filePaths.value(tab);
}
void DirtyStateManager::removeTab(QWidget* tab) {
if (!tab) return;
m_dirtyTabs.remove(tab);
m_filePaths.remove(tab);
}