Major UI improvements across the application:
MainWindow:
- Integrate undo stack for field editing
- Dirty state tracking with tab title indicators (*)
- Save/SaveAs prompts on tab close with unsaved changes
- Export menu integration in tab context menu
- Tab management: close all, close left/right of current tab
- Connect export system to tree widget signals
XTreeWidget:
- Add context menus for tree items
- Quick export action for immediate saves
- Export dialog action for format options
- Raw data export for any item
- Batch export for containers
XTreeWidgetItem:
- Add modified state tracking with visual indicator
- Support for marking items as dirty
ImagePreviewWidget:
- Enhanced image display and navigation
- Improved zoom and pan controls
TreeBuilder:
- Better handling of nested data structures
- Improved child node generation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implement a unified export system for extracting data from parsed files:
ExportManager (singleton):
- Centralized export handling for all content types
- Content type detection (image, audio, video, text, binary)
- Batch export support with progress tracking
Format-specific export dialogs:
- ImageExportDialog: PNG, JPEG, BMP, TGA with quality options
- AudioExportDialog: WAV, MP3, OGG with FFmpeg integration
- BinaryExportDialog: Raw data export with optional decompression
- BatchExportDialog: Recursive export with filtering options
- Base ExportDialog class for common functionality
Settings additions:
- FFmpeg path configuration with auto-detection
- Search common install locations and PATH
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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>
- Change TreeBuilder m_registry from reference to pointer to allow assignment
- Add default constructor to TreeBuilder for member initialization
- Add Xbox SDK xcompress64 library to xscript-cli linker dependencies
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Refactor MainWindow to use TreeBuilder for parsed data organization
- Integrate new ListPreviewWidget and TextViewerWidget
- Add Python path auto-detection and scripts directory settings
- Add log-to-file option and improve debug logging feedback
- Improve image format detection (PNG, JPEG, BMP, DDS, TGA, RCB)
- Update app.pro with new source files
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add ListPreviewWidget for displaying parsed list data with table view
- Add TextViewerWidget for text file preview with syntax highlighting
- Add TreeBuilder class to organize parsed data into tree structure
- Enhance HexView with selection support, copy functionality, keyboard navigation
- Enhance ImagePreviewWidget with additional format support and metadata display
- Minor audio preview widget adjustments
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add QuickBMS path setting to Settings class with auto-detection
- Add Tools page in Preferences with QuickBMS configuration UI
- Update Compression class to use configurable path instead of hardcoded
- Add startup prompt if QuickBMS not found, with option to locate
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Reset All Settings button in General preferences
- Clears all settings and restores XPlor Dark theme
- Applies theme change immediately
- Confirmation dialog before reset
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- App metadata defines at top of main.cpp
- Dynamic themed app icon (accent color replaces red)
- Icon refreshes on theme change
- Disabled unimplemented menu actions
- Image preview with theme support
- Updated CLI help text with feature list
- Splash screen integration
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- API token loaded from .env at build time via qmake
- All fields required with validation
- Email validation with regex
- Cleaner UI with placeholder text
- Added .env to gitignore
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Custom painting with theme colors
- Accent stripe at top
- "X" in accent color, "Plor" in text color
- Dynamic version from QCoreApplication
- Dynamic copyright year
- Removed "With Help From" section
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Theme selection (dark/light modes)
- Accent color picker with presets
- Live preview of theme changes
- Settings persistence via QSettings
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- View loaded XScript definitions
- Shows definition name and source path
- Displays load status (success/error)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Waveform visualization with theme accent color
- Playback controls (play/pause, stop, position slider)
- Time display with milliseconds (MM:SS.mmm)
- Position tracking line on waveform
- Volume control
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Custom hex viewer with address, hex, and ASCII columns
- Theme-aware colors for selection and highlights
- Keyboard navigation and selection support
- Scrollable view for large files
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Settings singleton for app-wide preferences (theme, recent files)
- Theme support with accent colors and dark/light modes
- Splash screen with custom painting, progress bar, theme colors
- Wait-for-interaction option for splash screen
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add TypeRegistry::supportedExtensions() to extract file extensions
from loaded XScript definitions by parsing criteria blocks
- Implement File > Open action with QFileDialog
- Generate filter string dynamically from all root type definitions
- Include "All Supported Files" and "All Files" filter options
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add ImagePreviewWidget class for previewing texture assets:
- TGA image loading (uncompressed and RLE)
- Xbox 360 XBTX2D texture format support (work in progress)
- DXT1/DXT5 block decompression
- Xbox 360 texture untiling using SDK algorithms
- Scroll-to-zoom and drag-to-pan functionality
- Debug export to PNG for development
The Xbox 360 texture decoding is still a work in progress and
needs further research for proper implementation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit fixes a potential off-by-one error in the IPAK loading logic. The loop conditions in the `LoadFile_IPAK` function were incorrect, leading to incorrect handling of data chunks. The loop conditions have been corrected to ensure that all data chunks are processed correctly.