cutter/src/common/Configuration.h

211 lines
5.8 KiB
C
Raw Normal View History

#ifndef CONFIGURATION_H
#define CONFIGURATION_H
#include <QSettings>
#include <QFont>
#include <core/Cutter.h>
#define Config() (Configuration::instance())
2017-10-15 07:14:05 +00:00
#define ConfigColor(x) Config()->getColor(x)
2019-07-11 13:21:54 +00:00
#ifdef CUTTER_ENABLE_KSYNTAXHIGHLIGHTING
namespace KSyntaxHighlighting {
class Repository;
class Theme;
}
#endif
class QSyntaxHighlighter;
class QTextDocument;
enum ColorFlags {
LightFlag = 1,
2019-12-08 09:57:42 +00:00
DarkFlag = 2,
};
struct CutterInterfaceTheme {
QString name;
ColorFlags flag;
};
class CUTTER_EXPORT Configuration : public QObject
{
Q_OBJECT
private:
QPalette nativePalette;
QSettings s;
static Configuration *mPtr;
2019-07-11 13:21:54 +00:00
#ifdef CUTTER_ENABLE_KSYNTAXHIGHLIGHTING
KSyntaxHighlighting::Repository *kSyntaxHighlightingRepository;
#endif
bool outputRedirectEnabled = true;
2019-07-11 13:21:54 +00:00
Configuration();
2017-11-20 11:23:37 +00:00
// Colors
2018-12-21 16:30:46 +00:00
void loadBaseThemeNative();
void loadBaseThemeDark();
void loadNativeStylesheet();
void loadLightStylesheet();
void loadDarkStylesheet();
2019-12-08 09:57:42 +00:00
void loadMidnightStylesheet();
2017-10-15 07:14:05 +00:00
// Asm Options
void applySavedAsmOptions();
public:
static const QList<CutterInterfaceTheme>& cutterInterfaceThemesList();
static const QHash<QString, ColorFlags> relevantThemes;
static const QHash<QString, QHash<ColorFlags, QColor>> cutterOptionColors;
// Functions
2018-03-21 20:32:32 +00:00
static Configuration *instance();
2019-02-20 17:52:11 +00:00
void loadInitial();
2017-12-03 12:10:09 +00:00
void resetAll();
// Auto update
bool getAutoUpdateEnabled() const;
void setAutoUpdateEnabled(bool au);
2018-10-31 16:07:53 +00:00
// Languages
QLocale getCurrLocale() const;
void setLocale(const QLocale &l);
bool setLocaleByName(const QString &language);
2019-01-19 20:54:02 +00:00
QStringList getAvailableTranslations();
2018-10-31 16:07:53 +00:00
// Fonts
/**
* @brief Gets the configured font set by the font selection box
* @return the configured font
*/
const QFont getBaseFont() const;
/**
* @brief Gets the configured font with the point size adjusted by the configured zoom
* level (minimum of 10%)
* @return the configured font size adjusted by zoom level
*/
const QFont getFont() const;
void setFont(const QFont &font);
qreal getZoomFactor() const;
void setZoomFactor(qreal zoom);
2017-10-15 07:14:05 +00:00
// Colors
bool windowColorIsDark();
static bool nativeWindowIsDark();
void setLastThemeOf(const CutterInterfaceTheme &currInterfaceTheme, const QString &theme);
QString getLastThemeOf(const CutterInterfaceTheme &currInterfaceTheme) const;
void setInterfaceTheme(int theme);
int getInterfaceTheme()
2018-03-21 20:32:32 +00:00
{
return s.value("ColorPalette", 0).toInt();
2018-03-21 20:32:32 +00:00
}
2017-10-15 07:14:05 +00:00
const CutterInterfaceTheme *getCurrentTheme();
2018-12-24 15:12:08 +00:00
2019-07-11 13:21:54 +00:00
#ifdef CUTTER_ENABLE_KSYNTAXHIGHLIGHTING
KSyntaxHighlighting::Repository *getKSyntaxHighlightingRepository();
KSyntaxHighlighting::Theme getKSyntaxHighlightingTheme();
#endif
QSyntaxHighlighter *createSyntaxHighlighter(QTextDocument *document);
2018-03-25 16:58:34 +00:00
QString getDirProjects();
void setDirProjects(const QString &dir);
2018-03-25 16:58:34 +00:00
QString getRecentFolder();
void setRecentFolder(const QString &dir);
2018-07-07 08:47:46 +00:00
void setNewFileLastClicked(int lastClicked);
int getNewFileLastClicked();
2018-02-12 12:22:53 +00:00
// Images
QString getLogoFile();
// Asm Options
void resetToDefaultAsmOptions();
QString getColorTheme() const { return s.value("theme", "cutter").toString(); }
void setColorTheme(const QString &theme);
/**
* @brief Change current color theme if it doesnt't much native theme's darkness.
*/
void adjustColorThemeDarkness();
int colorThemeDarkness(const QString &colorTheme) const;
void setColor(const QString &name, const QColor &color);
const QColor getColor(const QString &name) const;
2019-03-06 20:30:39 +00:00
/**
* @brief Get the value of a config var either from r2 or settings, depending on the key.
*/
QVariant getConfigVar(const QString &key);
bool getConfigBool(const QString &key);
int getConfigInt(const QString &key);
QString getConfigString(const QString &key);
2019-03-06 20:30:39 +00:00
/**
* @brief Set the value of a config var either to r2 or settings, depending on the key.
*/
void setConfig(const QString &key, const QVariant &value);
2019-01-19 20:54:02 +00:00
bool isFirstExecution();
2019-07-16 18:33:05 +00:00
/**
* @return id of the last selected decompiler (see CutterCore::getDecompilerById)
*/
QString getSelectedDecompiler();
void setSelectedDecompiler(const QString &id);
bool getDecompilerAutoRefreshEnabled();
void setDecompilerAutoRefreshEnabled(bool enabled);
void enableDecompilerAnnotationHighlighter(bool useDecompilerHighlighter);
bool isDecompilerAnnotationHighlighterEnabled();
// Graph
int getGraphBlockMaxChars() const
{
return s.value("graph.maxcols", 100).toInt();
}
void setGraphBlockMaxChars(int ch)
{
s.setValue("graph.maxcols", ch);
}
/**
* @brief Getters and setters for the transaparent option state and scale factor for bitmap graph exports.
*/
bool getBitmapTransparentState();
double getBitmapExportScaleFactor();
void setBitmapTransparentState(bool inputValueGraph);
void setBitmapExportScaleFactor(double inputValueGraph);
void setGraphSpacing(QPoint blockSpacing, QPoint edgeSpacing);
QPoint getGraphBlockSpacing();
QPoint getGraphEdgeSpacing();
/**
* @brief Enable or disable Cutter output redirection.
* Output redirection state can only be changed early during Cutter initalization.
* Changing it later will have no effect
* @param enabled set this to false for disabling output redirection
*/
void setOutputRedirectionEnabled(bool enabled);
bool getOutputRedirectionEnabled() const;
public slots:
void refreshFont();
signals:
void fontsUpdated();
2017-11-20 11:23:37 +00:00
void colorsUpdated();
void interfaceThemeChanged();
#ifdef CUTTER_ENABLE_KSYNTAXHIGHLIGHTING
void kSyntaxHighlightingThemeChanged();
#endif
};
#endif // CONFIGURATION_H