#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 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); // 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