XPlor/app/settings.h
njohnson e4c913bb06 Refactor main window and extend settings functionality
- 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>
2026-01-11 12:09:31 -05:00

153 lines
3.9 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 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