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>
55 lines
1.2 KiB
C++
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);
|
|
}
|