#ifndef SETTINGS_H #define SETTINGS_H #include #include #include #include #include // 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