XPlor/app/settings.h
njohnson d7488c5fa9 Add comprehensive export system with format-specific dialogs
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>
2026-01-12 20:54:38 -05:00

191 lines
5.2 KiB
C++

#ifndef SETTINGS_H
#define SETTINGS_H
#include <QObject>
#include <QSettings>
#include <QString>
#include <QFont>
#include <QColor>
// Theme definition
struct Theme {
QString name;
QString accentColor;
QString accentColorDark;
QString accentColorLight;
QString backgroundColor;
QString panelColor;
QString borderColor;
QString textColor;
QString textColorMuted;
};
class Settings : public QObject
{
Q_OBJECT
public:
static Settings& instance();
// Theme
QString currentTheme() const;
void setCurrentTheme(const QString& themeName);
Theme theme() const;
QStringList availableThemes() const;
static Theme getTheme(const QString& name);
// General
QString exportDirectory() const;
void setExportDirectory(const QString& path);
bool autoExportOnParse() const;
void setAutoExportOnParse(bool enable);
// Tools
QString quickBmsPath() const;
void setQuickBmsPath(const QString& path);
static QString findQuickBms(); // Auto-detect QuickBMS
QString pythonPath() const;
void setPythonPath(const QString& path);
static QString findPython(); // Auto-detect Python
QString ffmpegPath() const;
void setFFmpegPath(const QString& path);
static QString findFFmpeg(); // Auto-detect FFmpeg
QString scriptsDirectory() const;
void setScriptsDirectory(const QString& path);
// Debug/Logging
bool debugLoggingEnabled() const;
void setDebugLoggingEnabled(bool enable);
bool verboseParsingEnabled() const;
void setVerboseParsingEnabled(bool enable);
bool logToFileEnabled() const;
void setLogToFileEnabled(bool enable);
// View
QString fontFamily() const;
void setFontFamily(const QString& family);
int fontSize() const;
void setFontSize(int size);
int viewZoom() const;
void setViewZoom(int zoom);
// Tree Widget
bool showItemCounts() const;
void setShowItemCounts(bool show);
bool collapseByDefault() const;
void setCollapseByDefault(bool collapse);
bool groupByExtension() const;
void setGroupByExtension(bool group);
bool naturalSorting() const;
void setNaturalSorting(bool enable);
// Hex Viewer
int hexBytesPerLine() const;
void setHexBytesPerLine(int bytes);
bool hexShowAscii() const;
void setHexShowAscii(bool show);
// Audio Preview
bool audioAutoPlay() const;
void setAudioAutoPlay(bool enable);
// Image Preview
bool imageShowGrid() const;
void setImageShowGrid(bool show);
bool imageAutoZoom() const;
void setImageAutoZoom(bool enable);
// File Type Associations
// Returns the viewer type for a given extension: "hex", "text", "image", "audio", "list"
QString viewerForExtension(const QString& extension) const;
void setViewerForExtension(const QString& extension, const QString& viewer);
QStringList textFileExtensions() const;
void setTextFileExtensions(const QStringList& extensions);
QStringList imageFileExtensions() const;
void setImageFileExtensions(const QStringList& extensions);
QStringList audioFileExtensions() const;
void setAudioFileExtensions(const QStringList& extensions);
QStringList listFileExtensions() const;
void setListFileExtensions(const QStringList& extensions);
// Export Settings
QString defaultImageExportFormat() const;
void setDefaultImageExportFormat(const QString& format);
QString defaultAudioExportFormat() const;
void setDefaultAudioExportFormat(const QString& format);
int imageJpegQuality() const; // 1-100, default 90
void setImageJpegQuality(int quality);
int imagePngCompression() const; // 0-9, default 6
void setImagePngCompression(int level);
int audioMp3Bitrate() const; // 128, 192, 256, 320 kbps
void setAudioMp3Bitrate(int bitrate);
int audioOggQuality() const; // -1 to 10, default 5
void setAudioOggQuality(int quality);
int audioFlacCompression() const; // 0-8, default 5
void setAudioFlacCompression(int level);
bool exportRememberSettings() const;
void setExportRememberSettings(bool remember);
QString batchExportDirectory() const;
void setBatchExportDirectory(const QString& path);
bool batchExportPreserveStructure() const;
void setBatchExportPreserveStructure(bool preserve);
QString batchExportConflictResolution() const; // "number", "overwrite", "skip"
void setBatchExportConflictResolution(const QString& resolution);
// Window State
QByteArray windowGeometry() const;
void setWindowGeometry(const QByteArray& geometry);
QByteArray windowState() const;
void setWindowState(const QByteArray& state);
// Recent Files
QStringList recentFiles() const;
void addRecentFile(const QString& path);
void clearRecentFiles();
// Sync to disk
void sync();
// Reset all settings to defaults
void resetToDefaults();
signals:
void debugLoggingChanged(bool enabled);
void themeChanged(const Theme& theme);
void settingsChanged();
private:
explicit Settings(QObject *parent = nullptr);
~Settings() = default;
Settings(const Settings&) = delete;
Settings& operator=(const Settings&) = delete;
QSettings m_settings;
};
#endif // SETTINGS_H