From b23b8edce7cbd48165084dbd852875afeb800735 Mon Sep 17 00:00:00 2001 From: tpearson Date: Tue, 5 Oct 2010 18:12:45 +0000 Subject: Update qtcurve to latest upstream version git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kde-style-qtcurve@1182805 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- common/config_file.c | 2756 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 2439 insertions(+), 317 deletions(-) (limited to 'common/config_file.c') diff --git a/common/config_file.c b/common/config_file.c index 930ce21..7174286 100644 --- a/common/config_file.c +++ b/common/config_file.c @@ -1,5 +1,5 @@ -/* - QtCurve (C) Craig Drummond, 2003 - 2007 Craig.Drummond@lycos.co.uk + /* + QtCurve (C) Craig Drummond, 2003 - 2010 craig.p.drummond@gmail.com ---- @@ -23,15 +23,40 @@ #include #include #include -#include #include #include -#include #include -#define QTC_MAX_FILENAME_LEN 1024 -#define QTC_MAX_INPUT_LINE_LEN 256 -#define QTC_FILE "qtcurvestylerc" +#ifndef _WIN32 +#include +#include +#endif + +#define MAKE_VERSION(a, b) (((a) << 16) | ((b) << 8)) +#define MAKE_VERSION3(a, b, c) (((a) << 16) | ((b) << 8) | (c)) + +#define MAX_CONFIG_FILENAME_LEN 1024 +#define MAX_CONFIG_INPUT_LINE_LEN 256 +#define CONFIG_FILE "stylerc" +#define OLD_CONFIG_FILE "qtcurvestylerc" +#define VERSION_KEY "version" + +#ifdef __cplusplus + +#if QT_VERSION >= 0x040000 +#include +#include +#include +#define TO_LATIN1(A) A.toLatin1().constData() +#else +#define TO_LATIN1(A) A.latin1() + +#include +#include +#include +#endif + +#endif // __cplusplus #ifdef CONFIG_READ static int c2h(char ch) @@ -78,6 +103,14 @@ static EDefBtnIndicator toInd(const char *str, EDefBtnIndicator def) return IND_CORNER; if(0==memcmp(str, "colored", 7)) return IND_COLORED; + if(0==memcmp(str, "tint", 4)) + return IND_TINT; + if(0==memcmp(str, "glow", 4)) + return IND_GLOW; + if(0==memcmp(str, "darken", 6)) + return IND_DARKEN; + if(0==memcmp(str, "origselected", 12)) + return IND_SELECTED; } return def; @@ -97,6 +130,8 @@ static ELine toLine(const char *str, ELine def) return LINE_DOTS; if(0==memcmp(str, "flat", 4)) return LINE_FLAT; + if(0==memcmp(str, "1dot", 5)) + return LINE_1DOT; } return def; } @@ -121,15 +156,19 @@ static EMouseOver toMouseOver(const char *str, EMouseOver def) { if(0==memcmp(str, "true", 4) || 0==memcmp(str, "colored", 7)) return MO_COLORED; + if(0==memcmp(str, "thickcolored", 12)) + return MO_COLORED_THICK; if(0==memcmp(str, "plastik", 7)) return MO_PLASTIK; + if(0==memcmp(str, "glow", 4)) + return MO_GLOW; if(0==memcmp(str, "false", 4) || 0==memcmp(str, "none", 4)) return MO_NONE; } return def; } -static EAppearance toAppearance(const char *str, EAppearance def) +static EAppearance toAppearance(const char *str, EAppearance def, EAppAllow allow) { if(str) { @@ -137,35 +176,69 @@ static EAppearance toAppearance(const char *str, EAppearance def) return APPEARANCE_FLAT; if(0==memcmp(str, "raised", 6)) return APPEARANCE_RAISED; - if(0==memcmp(str, "gradient", 8) || 0==memcmp(str, "lightgradient", 13)) - return APPEARANCE_GRADIENT; - if(0==memcmp(str, "splitgradient", 13)) - return APPEARANCE_SPLIT_GRADIENT; - if(0==memcmp(str, "glass", 5) || 0==memcmp(str, "shinyglass", 10)) - return APPEARANCE_SHINY_GLASS; if(0==memcmp(str, "dullglass", 9)) return APPEARANCE_DULL_GLASS; + if(0==memcmp(str, "glass", 5) || 0==memcmp(str, "shinyglass", 10)) + return APPEARANCE_SHINY_GLASS; + if(0==memcmp(str, "agua", 4)) +#if defined __cplusplus && !defined CONFIG_DIALOG && defined QT_VERSION && QT_VERSION < 0x040000 + return APPEARANCE_AGUA_MOD; +#else + return APPEARANCE_AGUA; +#endif + if(0==memcmp(str, "soft", 4)) + return APPEARANCE_SOFT_GRADIENT; + if(0==memcmp(str, "gradient", 8) || 0==memcmp(str, "lightgradient", 13)) + return APPEARANCE_GRADIENT; + if(0==memcmp(str, "harsh", 5)) + return APPEARANCE_HARSH_GRADIENT; if(0==memcmp(str, "inverted", 8)) return APPEARANCE_INVERTED; + if(0==memcmp(str, "darkinverted", 12)) + return APPEARANCE_DARK_INVERTED; + if(0==memcmp(str, "splitgradient", 13)) + return APPEARANCE_SPLIT_GRADIENT; if(0==memcmp(str, "bevelled", 8)) return APPEARANCE_BEVELLED; + if(APP_ALLOW_FADE==allow && 0==memcmp(str, "fade", 4)) + return APPEARANCE_FADE; + if(APP_ALLOW_STRIPED==allow && 0==memcmp(str, "striped", 7)) + return APPEARANCE_STRIPED; + if(APP_ALLOW_NONE==allow && 0==memcmp(str, "none", 4)) + return APPEARANCE_NONE; + + if(0==memcmp(str, "customgradient", 14) && strlen(str)>14) + { + int i=atoi(&str[14]); + + i--; + if(i>=0 && i= 0x040000)) +static ETitleBarIcon toTitlebarIcon(const char *str, ETitleBarIcon def) +{ + if(str) + { + if(0==memcmp(str, "none", 4)) + return TITLEBAR_ICON_NONE; + if(0==memcmp(str, "menu", 4)) + return TITLEBAR_ICON_MENU_BUTTON; + if(0==memcmp(str, "title", 5)) + return TITLEBAR_ICON_NEXT_TO_TITLE; + } + return def; +} #endif -#ifdef CONFIG_WRITE -#include +static EImageType toImageType(const char *str, EImageType def) +{ + if(str) + { + if(0==memcmp(str, "none", 4)) + return IMG_NONE; + if(0==memcmp(str, "plainrings", 10)) + return IMG_PLAIN_RINGS; + if(0==memcmp(str, "rings", 5)) + return IMG_BORDERED_RINGS; + if(0==memcmp(str, "squarerings", 11)) + return IMG_SQUARE_RINGS; + if(0==memcmp(str, "file", 4)) + return IMG_FILE; + } + return def; +} + +static EGlow toGlow(const char *str, EGlow def) +{ + if(str) + { + if(0==memcmp(str, "none", 4)) + return GLOW_NONE; + if(0==memcmp(str, "start", 5)) + return GLOW_START; + if(0==memcmp(str, "middle", 6)) + return GLOW_MIDDLE; + if(0==memcmp(str, "end", 3)) + return GLOW_END; + } + return def; +} #endif static const char * getHome() { static const char *home=NULL; +#ifdef _WIN32 + home = getenv("HOMEPATH"); +#else if(!home) { struct passwd *p=getpwuid(getuid()); @@ -295,15 +563,82 @@ static const char * getHome() if(!home) home="/tmp"; } - +#endif return home; } -static const char *xdgConfigFolder() +#ifdef __cplusplus + +#if defined QTC_QT_ONLY || QT_VERSION < 0x040000 +#if QT_VERSION < 0x040000 +#include +#include +#endif +// Take from KStandardDirs::makeDir +static bool makeDir(const QString& dir, int mode) +{ + // we want an absolute path + if (QDir::isRelativePath(dir)) + return false; + +#ifdef Q_WS_WIN + return QDir().mkpath(dir); +#else + QString target = dir; + uint len = target.length(); + + // append trailing slash if missing + if (dir.at(len - 1) != '/') + target += '/'; + + QString base; + uint i = 1; + + while( i < len ) + { + struct stat st; +#if QT_VERSION >= 0x040000 + int pos = target.indexOf('/', i); +#else + int pos = target.find('/', i); +#endif + base += target.mid(i - 1, pos - i + 1); + QByteArray baseEncoded = QFile::encodeName(base); + // bail out if we encountered a problem + if (stat(baseEncoded, &st) != 0) + { + // Directory does not exist.... + // Or maybe a dangling symlink ? + if (lstat(baseEncoded, &st) == 0) + (void)unlink(baseEncoded); // try removing + + if (mkdir(baseEncoded, static_cast(mode)) != 0) + { +#if QT_VERSION >= 0x040000 + baseEncoded.prepend("trying to create local folder "); + perror(baseEncoded.constData()); +#else + perror("trying to create QtCurve config folder "); +#endif + return false; // Couldn't create it :-( + } + } + i = pos + 1; + } + return true; +#endif +} + +#else +#include +#endif +#endif + +static const char *qtcConfDir() { - static char xdgDir[QTC_MAX_FILENAME_LEN]={'\0'}; + static char *cfgDir=NULL; - if(!xdgDir[0]) + if(!cfgDir) { static const char *home=NULL; @@ -333,7 +668,12 @@ static const char *xdgConfigFolder() "sudo su" / "kcmshell style". The 1st would write to ~/.config, but if root has a XDG_ set then that would be used on the second :-( */ +#ifndef _WIN32 char *env=0==getuid() ? NULL : getenv("XDG_CONFIG_HOME"); +#else + char *env=0; +#endif + #endif if(!env) @@ -341,59 +681,210 @@ static const char *xdgConfigFolder() if(!home) home=getHome(); - sprintf(xdgDir, "%s/.config", home); + cfgDir=(char *)malloc(strlen(home)+18); + sprintf(cfgDir, "%s/.config/qtcurve/", home); } else - strcpy(xdgDir, env); + { + cfgDir=(char *)malloc(strlen(env)+10); + sprintf(cfgDir, "%s/qtcurve/", env); + } -#if defined CONFIG_WRITE || !defined __cplusplus +//#if defined CONFIG_WRITE || !defined __cplusplus { struct stat info; - if(0!=lstat(xdgDir, &info)) + if(0!=lstat(cfgDir, &info)) { #ifdef __cplusplus - KStandardDirs::makeDir(xdgDir, 0755); +#if defined QTC_QT_ONLY || QT_VERSION < 0x040000 + makeDir(cfgDir, 0755); #else - g_mkdir_with_parents(xdgDir, 0755); + KStandardDirs::makeDir(cfgDir, 0755); +#endif +#else + g_mkdir_with_parents(cfgDir, 0755); #endif } } +//#endif + } + + return cfgDir; +} + +#ifdef __cplusplus +static WindowBorders qtcGetWindowBorderSize(bool force=false) +#else +static WindowBorders qtcGetWindowBorderSize(bool force) +#endif +{ + static WindowBorders def={24, 18, 4, 4}; + static WindowBorders sizes={-1, -1, -1, -1}; + + if(-1==sizes.titleHeight || force) + { +#ifdef __cplusplus + QFile f(qtcConfDir()+QString(BORDER_SIZE_FILE)); + +#if QT_VERSION >= 0x040000 + if(f.open(QIODevice::ReadOnly)) +#else + if(f.open(IO_ReadOnly)) #endif + { + QTextStream stream(&f); + QString line; + + sizes.titleHeight=stream.readLine().toInt(); + sizes.toolTitleHeight=stream.readLine().toInt(); + sizes.bottom=stream.readLine().toInt(); + sizes.sides=stream.readLine().toInt(); + f.close(); + } +#else // __cplusplus + char *filename=(char *)malloc(strlen(qtcConfDir())+strlen(BORDER_SIZE_FILE)+1); + FILE *f=NULL; + + sprintf(filename, "%s"BORDER_SIZE_FILE, qtcConfDir()); + if((f=fopen(filename, "r"))) + { + char *line=NULL; + size_t len; + getline(&line, &len, f); + sizes.titleHeight=atoi(line); + getline(&line, &len, f); + sizes.toolTitleHeight=atoi(line); + getline(&line, &len, f); + sizes.bottom=atoi(line); + getline(&line, &len, f); + sizes.sides=atoi(line); + if(line) + free(line); + fclose(f); + } + free(filename); +#endif // __cplusplus + } + + return sizes.titleHeight<12 ? def : sizes; +} + +#if (!defined QT_VERSION || QT_VERSION >= 0x040000) && !defined CONFIG_DIALOG + +#define MENU_FILE_PREFIX "menubar-" +#define STATUS_FILE_PREFIX "statusbar-" + +#define qtcMenuBarHidden(A) qtcBarHidden((A), MENU_FILE_PREFIX) +#define qtcSetMenuBarHidden(A, H) qtcSetBarHidden((A), (H), MENU_FILE_PREFIX) +#define qtcStatusBarHidden(A) qtcBarHidden((A), STATUS_FILE_PREFIX) +#define qtcSetStatusBarHidden(A, H) qtcSetBarHidden((A), (H), STATUS_FILE_PREFIX) + +#ifdef __cplusplus +static bool qtcBarHidden(const QString &app, const char *prefix) +{ + return QFile::exists(QFile::decodeName(qtcConfDir())+prefix+app); +} + +static void qtcSetBarHidden(const QString &app, bool hidden, const char *prefix) +{ + if(!hidden) + QFile::remove(QFile::decodeName(qtcConfDir())+prefix+app); + else + QFile(QFile::decodeName(qtcConfDir())+prefix+app).open(QIODevice::WriteOnly); +} + +#else // __cplusplus +static bool qtcFileExists(const char *name) +{ + struct stat info; + + return 0==lstat(name, &info) && S_ISREG(info.st_mode); +} + +static char * qtcGetBarFileName(const char *app, const char *prefix) +{ + char *filename=NULL; + + if(!filename) + { + filename=(char *)malloc(strlen(qtcConfDir())+strlen(prefix)+strlen(app)+1); + sprintf(filename, "%s%s%s", qtcConfDir(), prefix, app); + } + + return filename; +} + +static bool qtcBarHidden(const char *app, const char *prefix) +{ + return qtcFileExists(qtcGetBarFileName(app, prefix)); +} + +static void qtcSetBarHidden(const char *app, bool hidden, const char *prefix) +{ + if(!hidden) + unlink(qtcGetBarFileName(app, prefix)); + else + { + FILE *f=fopen(qtcGetBarFileName(app, prefix), "w"); + + if(f) + fclose(f); } +} + +#endif // __cplusplus + +#ifdef __cplusplus +#include +#endif // __cplusplus + +static void loadBgndImage(QtCImage *img) +{ + if(!img->loaded && + img->width>16 && img->width<1024 && img->height>16 && img->height<1024) + { + img->loaded=true; +#ifdef __cplusplus + if(!img->file.isEmpty()) + { + QSvgRenderer svg(img->file); - return xdgDir; + if(svg.isValid()) + { + img->pix=QPixmap(img->width, img->height); + img->pix.fill(Qt::transparent); + QPainter painter(&img->pix); + svg.render(&painter); + painter.end(); + } + } +#else // __cplusplus + img->pix=0L; + if(img->file) + img->pix=gdk_pixbuf_new_from_file_at_scale(img->file, img->width, img->height, FALSE, NULL); +#endif // __cplusplus + } } +#endif // (!defined QT_VERSION || QT_VERSION >= 0x040000) && !defined CONFIG_DIALOG + #ifdef CONFIG_READ #ifdef __cplusplus -#define QTC_IS_BLACK(A) (0==(A).red() && 0==(A).green() && 0==(A).blue()) +#define IS_BLACK(A) (0==(A).red() && 0==(A).green() && 0==(A).blue()) #else -#define QTC_IS_BLACK(A) (0==(A).red && 0==(A).green && 0==(A).blue) +#define IS_BLACK(A) (0==(A).red && 0==(A).green && 0==(A).blue) #endif static void checkColor(EShade *s, color *c) { - if(SHADE_CUSTOM==*s && QTC_IS_BLACK(*c)) + if(SHADE_CUSTOM==*s && IS_BLACK(*c)) *s=SHADE_NONE; } #ifdef __cplusplus -#if QT_VERSION >= 0x040000 -#include -#include -#include -#define QTC_LATIN1(A) A.toLatin1() -#else -#define QTC_LATIN1(A) A.latin1() - -#include -#include -#include -#endif - class QtCConfig { public: @@ -401,7 +892,8 @@ class QtCConfig QtCConfig(const QString &filename); bool ok() const { return values.count()>0; } - const QString & readEntry(const char *key, const QString &def=QString::null); + bool hasKey(const QString &key) { return values.contains(key); } + const QString & readEntry(const QString &key, const QString &def=QString::null); private: @@ -436,47 +928,105 @@ QtCConfig::QtCConfig(const QString &filename) } } -inline const QString & QtCConfig::readEntry(const char *key, const QString &def) +inline const QString & QtCConfig::readEntry(const QString &key, const QString &def) { return values.contains(key) ? values[key] : def; } -inline QString readStringEntry(QtCConfig &cfg, const char *key) +inline QString readStringEntry(QtCConfig &cfg, const QString &key) { return cfg.readEntry(key); } -static int readNumEntry(QtCConfig &cfg, const char *key, int def) +static int readNumEntry(QtCConfig &cfg, const QString &key, int def) { const QString &val(readStringEntry(cfg, key)); return val.isEmpty() ? def : val.toInt(); } -static bool readBoolEntry(QtCConfig &cfg, const char *key, bool def) +static int readVersionEntry(QtCConfig &cfg, const QString &key) { const QString &val(readStringEntry(cfg, key)); + int major, minor, patch; - return val.isEmpty() ? def : (val=="true" ? true : false); + return !val.isEmpty() && 3==sscanf(TO_LATIN1(val), "%d.%d.%d", &major, &minor, &patch) + ? MAKE_VERSION3(major, minor, patch) + : 0; } -#if QT_VERSION >= 0x040000 -#define QTC_LATIN1(A) A.toLatin1() -#else -#define QTC_LATIN1(A) A.latin1() -#endif +static bool readBoolEntry(QtCConfig &cfg, const QString &key, bool def) +{ + const QString &val(readStringEntry(cfg, key)); + + return val.isEmpty() ? def : (val=="true" ? true : false); +} + +static void readDoubleList(QtCConfig &cfg, const char *key, double *list, int count) +{ +#if (defined QT_VERSION && (QT_VERSION >= 0x040000)) + QStringList strings(readStringEntry(cfg, key).split(',', QString::SkipEmptyParts)); +#else + QStringList strings(QStringList::split(',', readStringEntry(cfg, key))); +#endif + bool ok(count==strings.size()); + + if(ok) + { + QStringList::ConstIterator it(strings.begin()); + int i; -#define QTC_CFG_READ_COLOR(ENTRY) \ + for(i=0; iENTRY=def->ENTRY; \ else \ - setRgb(&(opts->ENTRY), QTC_LATIN1(sVal)); \ + setRgb(&(opts->ENTRY), TO_LATIN1(sVal)); \ } +#define CFG_READ_IMAGE(ENTRY) \ + { \ + opts->ENTRY.type=toImageType(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY.type); \ + opts->ENTRY.loaded=false; \ + if(IMG_FILE==opts->ENTRY.type) \ + { \ + QString file(cfg.readEntry(#ENTRY ".file")); \ + if(!file.isEmpty()) \ + { \ + opts->ENTRY.file=file; \ + opts->ENTRY.width=readNumEntry(cfg, #ENTRY ".width", 0); \ + opts->ENTRY.height=readNumEntry(cfg, #ENTRY ".height", 0); \ + } \ + } \ + } + +#if QT_VERSION >= 0x040000 + #define CFG_READ_STRING_LIST(ENTRY) \ + { \ + QString val=readStringEntry(cfg, #ENTRY); \ + Strings set=val.isEmpty() ? Strings() : Strings::fromList(val.split(",", QString::SkipEmptyParts)); \ + opts->ENTRY=set.count() || cfg.hasKey(#ENTRY) ? set : def->ENTRY; \ + } #else + #define CFG_READ_STRING_LIST(ENTRY) \ + { \ + QString val=readStringEntry(cfg, #ENTRY); \ + Strings list=val.isEmpty() ? Strings() : Strings::split(",", val, false); \ + opts->ENTRY=list.count() || cfg.hasKey(#ENTRY) ? list : def->ENTRY; \ + } +#endif +#else + static char * lookupCfgHash(GHashTable **cfg, char *key, char *val) { char *rv=NULL; @@ -502,9 +1052,9 @@ static GHashTable * loadConfig(const char *filename) if(f) { - char line[QTC_MAX_INPUT_LINE_LEN]; + char line[MAX_CONFIG_INPUT_LINE_LEN]; - while(NULL!=fgets(line, QTC_MAX_INPUT_LINE_LEN-1, f)) + while(NULL!=fgets(line, MAX_CONFIG_INPUT_LINE_LEN-1, f)) { char *eq=strchr(line, '='); int pos=eq ? eq-line : -1; @@ -545,6 +1095,16 @@ static int readNumEntry(GHashTable *cfg, char *key, int def) return str ? atoi(str) : def; } +static int readVersionEntry(GHashTable *cfg, char *key) +{ + char *str=readStringEntry(cfg, key); + int major, minor, patch; + + return str && 3==sscanf(str, "%d.%d.%d", &major, &minor, &patch) + ? MAKE_VERSION3(major, minor, patch) + : 0; +} + static gboolean readBoolEntry(GHashTable *cfg, char *key, gboolean def) { char *str=readStringEntry(cfg, key); @@ -552,9 +1112,47 @@ static gboolean readBoolEntry(GHashTable *cfg, char *key, gboolean def) return str ? (0==memcmp(str, "true", 4) ? true : false) : def; } -#define QTC_LATIN1(A) A +static void readDoubleList(GHashTable *cfg, char *key, double *list, int count) +{ + char *str=readStringEntry(cfg, key); + + if(str) + { + int j, + comma=0; + bool ok=true; + + for(j=0; str[j]; ++j) + if(','==str[j]) + comma++; + + ok=(count-1)==comma; + if(ok) + { + for(j=0; jENTRY=def->ENTRY; \ } -#endif +#define CFG_READ_IMAGE(ENTRY) \ + { \ + opts->ENTRY.type=toImageType(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY.type); \ + opts->ENTRY.loaded=false; \ + if(IMG_FILE==opts->ENTRY.type) \ + { \ + const char *file=readStringEntry(cfg, #ENTRY ".file"); \ + if(file) \ + { \ + opts->ENTRY.file=file; \ + opts->ENTRY.width=readNumEntry(cfg, #ENTRY ".width", 0); \ + opts->ENTRY.height=readNumEntry(cfg, #ENTRY ".height", 0); \ + } \ + } \ + } +#define CFG_READ_STRING_LIST(ENTRY) \ + { \ + const gchar *str=readStringEntry(cfg, #ENTRY); \ + if(str) \ + opts->ENTRY=g_strsplit(str, ",", -1); \ + else if(def->ENTRY) \ + { \ + opts->ENTRY=def->ENTRY; \ + def->ENTRY=NULL; \ + } \ + } -#define QTC_CFG_READ_NUM(ENTRY) \ - opts->ENTRY=readNumEntry(cfg, #ENTRY, def->ENTRY); +#endif -#define QTC_CFG_READ_BOOL(ENTRY) \ +#define CFG_READ_BOOL(ENTRY) \ opts->ENTRY=readBoolEntry(cfg, #ENTRY, def->ENTRY); -#define QTC_CFG_READ_ROUND(ENTRY) \ - opts->ENTRY=toRound(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_ROUND(ENTRY) \ + opts->ENTRY=toRound(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_DI(ENTRY) \ - opts->ENTRY=((double)(readNumEntry(cfg, #ENTRY, ((int)(def->ENTRY*100))-100)+100))/100.0; +#define CFG_READ_INT(ENTRY) \ + opts->ENTRY=readNumEntry(cfg, #ENTRY, def->ENTRY); -#define QTC_CFG_READ_TB_BORDER(ENTRY) \ - opts->ENTRY=toTBarBorder(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_INT_BOOL(ENTRY, DEF) \ + if(readBoolEntry(cfg, #ENTRY, false)) \ + opts->ENTRY=DEF; \ + else \ + opts->ENTRY=readNumEntry(cfg, #ENTRY, def->ENTRY); + +#define CFG_READ_TB_BORDER(ENTRY) \ + opts->ENTRY=toTBarBorder(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_MOUSE_OVER(ENTRY) \ - opts->ENTRY=toMouseOver(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_MOUSE_OVER(ENTRY) \ + opts->ENTRY=toMouseOver(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_APPEARANCE(ENTRY, DEF) \ - opts->ENTRY=toAppearance(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), DEF); +#define CFG_READ_APPEARANCE(ENTRY, ALLOW) \ + opts->ENTRY=toAppearance(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY, ALLOW); /* -#define QTC_CFG_READ_APPEARANCE(ENTRY) \ - opts->ENTRY=toAppearance(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_APPEARANCE(ENTRY) \ + opts->ENTRY=toAppearance(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); */ -#define QTC_CFG_READ_STRIPE(ENTRY) \ - opts->ENTRY=toStripe(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_STRIPE(ENTRY) \ + opts->ENTRY=toStripe(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_SLIDER(ENTRY) \ + opts->ENTRY=toSlider(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_DEF_BTN(ENTRY) \ + opts->ENTRY=toInd(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_SLIDER(ENTRY) \ - opts->ENTRY=toSlider(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_LINE(ENTRY) \ + opts->ENTRY=toLine(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_DEF_BTN(ENTRY) \ - opts->ENTRY=toInd(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_SHADE(ENTRY, AD, MENU_STRIPE, COL) \ + opts->ENTRY=toShade(TO_LATIN1(readStringEntry(cfg, #ENTRY)), AD, def->ENTRY, MENU_STRIPE, COL); -#define QTC_CFG_READ_LINE(ENTRY) \ - opts->ENTRY=toLine(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_SCROLLBAR(ENTRY) \ + opts->ENTRY=toScrollbar(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_SHADE(ENTRY, AD) \ - opts->ENTRY=toShade(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), AD, def->ENTRY); +#define CFG_READ_FRAME(ENTRY) \ + opts->ENTRY=toFrame(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_SCROLLBAR(ENTRY) \ - opts->ENTRY=toScrollbar(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_EFFECT(ENTRY) \ + opts->ENTRY=toEffect(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#define QTC_CFG_READ_EFFECT(ENTRY) \ - opts->ENTRY=toEffect(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_SHADING(ENTRY) \ + opts->ENTRY=toShading(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); -#ifdef QTC_CONFIG_DIALOG -#define QTC_CFG_READ_SHADING(ENTRY, UNUSED) \ - opts->ENTRY=toShading(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#define CFG_READ_ECOLOR(ENTRY) \ + opts->ENTRY=toEColor(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_FOCUS(ENTRY) \ + opts->ENTRY=toFocus(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_TAB_MO(ENTRY) \ + opts->ENTRY=toTabMo(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_GRAD_TYPE(ENTRY) \ + opts->ENTRY=toGradType(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#define CFG_READ_LV_LINES(ENTRY) \ + opts->ENTRY=toLvLines(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +#ifdef __cplusplus +#define CFG_READ_ALIGN(ENTRY) \ + opts->ENTRY=toAlign(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#endif + +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) +#define CFG_READ_TB_ICON(ENTRY) \ + opts->ENTRY=toTitlebarIcon(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); +#endif + +#define CFG_READ_GLOW(ENTRY) \ + opts->ENTRY=toGlow(TO_LATIN1(readStringEntry(cfg, #ENTRY)), def->ENTRY); + +static void checkAppearance(EAppearance *ap, Options *opts) +{ + if(*ap>=APPEARANCE_CUSTOM1 && *ap<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD)) + { +#ifdef __cplusplus + if(opts->customGradient.end()==opts->customGradient.find(*ap)) #else -#define QTC_CFG_READ_SHADING(ENTRY, DEF) \ - ENTRY=toShading(QTC_LATIN1(readStringEntry(cfg, #ENTRY)), DEF); + if(!opts->customGradient[*ap-APPEARANCE_CUSTOM1]) +#endif + { + if(ap==&opts->appearance) + *ap=APPEARANCE_FLAT; + else + *ap=opts->appearance; + } + } +} + +static void defaultSettings(Options *opts); + +#ifndef __cplusplus +static void copyGradients(Options *src, Options *dest) +{ + if(src && dest && src!=dest) + { + int i; + + for(i=0; icustomGradient[i] && src->customGradient[i]->numStops>0) + { + dest->customGradient[i]=malloc(sizeof(Gradient)); + dest->customGradient[i]->numStops=src->customGradient[i]->numStops; + dest->customGradient[i]->stops=malloc(sizeof(GradientStop) * dest->customGradient[i]->numStops); + memcpy(dest->customGradient[i]->stops, src->customGradient[i]->stops, + sizeof(GradientStop) * dest->customGradient[i]->numStops); + dest->customGradient[i]->border=src->customGradient[i]->border; + } + else + dest->customGradient[i]=NULL; + } +} + +static void copyOpts(Options *src, Options *dest) +{ + if(src && dest && src!=dest) + { + memcpy(dest, src, sizeof(Options)); + dest->noBgndGradientApps=src->noBgndGradientApps; + dest->noBgndOpacityApps=src->noBgndOpacityApps; + dest->noMenuBgndOpacityApps=src->noMenuBgndOpacityApps; + dest->noBgndImageApps=src->noBgndImageApps; +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + dest->noDlgFixApps=src->noDlgFixApps; + src->noDlgFixApps=NULL; #endif + dest->noMenuStripeApps=src->noMenuStripeApps; + src->noBgndGradientApps=src->noBgndOpacityApps=src->noMenuBgndOpacityApps=src->noBgndImageApps=src->noMenuStripeApps=NULL; + memcpy(dest->customShades, src->customShades, sizeof(double)*NUM_STD_SHADES); + memcpy(dest->customAlphas, src->customAlphas, sizeof(double)*NUM_STD_ALPHAS); + copyGradients(src, dest); + } +} +static void freeOpts(Options *opts) +{ + if(opts) + { + int i; + + if(opts->noBgndGradientApps) + g_strfreev(opts->noBgndGradientApps); + if(opts->noBgndOpacityApps) + g_strfreev(opts->noBgndOpacityApps); + if(opts->noMenuBgndOpacityApps) + g_strfreev(opts->noMenuBgndOpacityApps); + if(opts->noBgndImageApps) + g_strfreev(opts->noBgndImageApps); +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + if(opts->noDlgFixApps) + g_strfreev(opts->noDlgFixApps); + opts->noDlgFixApps=NULL +#endif + if(opts->noMenuStripeApps) + g_strfreev(opts->noMenuStripeApps); + opts->noBgndGradientApps=opts->noBgndOpacityApps=opts->noMenuBgndOpacityApps=opts->noBgndImageApps=opts->noMenuStripeApps=NULL; + for(i=0; icustomGradient[i]) + { + if(opts->customGradient[i]->stops) + free(opts->customGradient[i]->stops); + free(opts->customGradient[i]); + opts->customGradient[i]=NULL; + } + } +} +#endif + +static void checkConfig(Options *opts) +{ + /* **Must** check appearance first, as the rest will default to this */ + checkAppearance(&opts->appearance, opts); + checkAppearance(&opts->bgndAppearance, opts); + checkAppearance(&opts->menuBgndAppearance, opts); + checkAppearance(&opts->menubarAppearance, opts); + checkAppearance(&opts->menuitemAppearance, opts); + checkAppearance(&opts->toolbarAppearance, opts); + checkAppearance(&opts->lvAppearance, opts); + checkAppearance(&opts->tabAppearance, opts); + checkAppearance(&opts->activeTabAppearance, opts); + checkAppearance(&opts->sliderAppearance, opts); + checkAppearance(&opts->selectionAppearance, opts); + checkAppearance(&opts->titlebarAppearance, opts); + checkAppearance(&opts->inactiveTitlebarAppearance, opts); #ifdef __cplusplus -static bool readConfig(const QString &file, Options *opts, Options *def) + checkAppearance(&opts->titlebarButtonAppearance, opts); + checkAppearance(&opts->selectionAppearance, opts); + checkAppearance(&opts->dwtAppearance, opts); +#endif + checkAppearance(&opts->menuStripeAppearance, opts); + checkAppearance(&opts->progressAppearance, opts); + checkAppearance(&opts->progressGrooveAppearance, opts); + checkAppearance(&opts->grooveAppearance, opts); + checkAppearance(&opts->sunkenAppearance, opts); + checkAppearance(&opts->sbarBgndAppearance, opts); + checkAppearance(&opts->sliderFill, opts); + checkAppearance(&opts->tooltipAppearance, opts); + + if(SHADE_BLEND_SELECTED==opts->shadeCheckRadio) + opts->shadeCheckRadio=SHADE_SELECTED; + + checkColor(&opts->shadeMenubars, &opts->customMenubarsColor); + checkColor(&opts->shadeSliders, &opts->customSlidersColor); + checkColor(&opts->shadeCheckRadio, &opts->customCheckRadioColor); + checkColor(&opts->menuStripe, &opts->customMenuStripeColor); + checkColor(&opts->comboBtn, &opts->customComboBtnColor); + checkColor(&opts->sortedLv, &opts->customSortedLvColor); + if(APPEARANCE_BEVELLED==opts->toolbarAppearance) + opts->toolbarAppearance=APPEARANCE_GRADIENT; + else if(APPEARANCE_RAISED==opts->toolbarAppearance) + opts->toolbarAppearance=APPEARANCE_FLAT; + + if(APPEARANCE_BEVELLED==opts->menubarAppearance) + opts->menubarAppearance=APPEARANCE_GRADIENT; + else if(APPEARANCE_RAISED==opts->menubarAppearance) + opts->menubarAppearance=APPEARANCE_FLAT; + + if(APPEARANCE_BEVELLED==opts->sliderAppearance) + opts->sliderAppearance=APPEARANCE_GRADIENT; + + if(APPEARANCE_BEVELLED==opts->tabAppearance) + opts->tabAppearance=APPEARANCE_GRADIENT; + + if(APPEARANCE_BEVELLED==opts->activeTabAppearance) + opts->activeTabAppearance=APPEARANCE_GRADIENT; + + if(APPEARANCE_RAISED==opts->selectionAppearance) + opts->selectionAppearance=APPEARANCE_FLAT; + else if(APPEARANCE_BEVELLED==opts->selectionAppearance) + opts->selectionAppearance=APPEARANCE_GRADIENT; + + if(APPEARANCE_RAISED==opts->menuStripeAppearance) + opts->menuStripeAppearance=APPEARANCE_FLAT; + else if(APPEARANCE_BEVELLED==opts->menuStripeAppearance) + opts->menuStripeAppearance=APPEARANCE_GRADIENT; + + if(opts->highlightFactorhighlightFactor>MAX_HIGHLIGHT_FACTOR) + opts->highlightFactor=DEFAULT_HIGHLIGHT_FACTOR; + + if(opts->crHighlightcrHighlight>MAX_HIGHLIGHT_FACTOR) + opts->crHighlight=DEFAULT_CR_HIGHLIGHT_FACTOR; + + if(opts->splitterHighlightsplitterHighlight>MAX_HIGHLIGHT_FACTOR) + opts->splitterHighlight=DEFAULT_SPLITTER_HIGHLIGHT_FACTOR; + +#if !defined __cplusplus || defined CONFIG_DIALOG + if(opts->expanderHighlightexpanderHighlight>MAX_HIGHLIGHT_FACTOR) + opts->expanderHighlight=DEFAULT_EXPANDER_HIGHLIGHT_FACTOR; +#endif + + if(opts->menuDelaymenuDelay>MAX_MENU_DELAY) + opts->menuDelay=DEFAULT_MENU_DELAY; + + if(0==opts->sliderWidth%2) + opts->sliderWidth++; + + if(opts->sliderWidthsliderWidth>MAX_SLIDER_WIDTH) + opts->sliderWidth=DEFAULT_SLIDER_WIDTH; + + if(opts->sliderWidthsliderThumbs=LINE_NONE; + + if(opts->lighterPopupMenuBgndlighterPopupMenuBgnd>MAX_LIGHTER_POPUP_MENU) + opts->lighterPopupMenuBgnd=DEF_POPUPMENU_LIGHT_FACTOR; + + if(opts->tabBgndtabBgnd>MAX_TAB_BGND) + opts->tabBgnd=DEF_TAB_BGND; + + if(opts->animatedProgress && !opts->stripedProgress) + opts->animatedProgress=false; + + if(0==opts->gbFactor) + opts->groupBox=FRAME_PLAIN; + + if(opts->gbFactorgbFactor>MAX_GB_FACTOR) + opts->gbFactor=DEF_GB_FACTOR; + +#if defined __cplusplus && defined QT_VERSION && QT_VERSION < 0x040000 && !defined CONFIG_DIALOG + opts->crSize=CR_SMALL_SIZE; + if(SLIDER_CIRCULAR==opts->sliderStyle) + opts->sliderStyle=SLIDER_ROUND; + if(STRIPE_FADE==opts->stripedProgress) + opts->stripedProgress=STRIPE_PLAIN; +#endif + /* For now, only 2 sizes... */ + if(opts->crSize!=CR_SMALL_SIZE && opts->crSize!=CR_LARGE_SIZE) + opts->crSize=CR_SMALL_SIZE; + +/* +?? + if(SHADE_CUSTOM==opts->shadeMenubars || SHADE_BLEND_SELECTED==opts->shadeMenubars || !opts->borderMenuitems) + opts->colorMenubarMouseOver=true; +*/ + +#if defined __cplusplus && defined QT_VERSION && QT_VERSION < 0x040000 && !defined CONFIG_DIALOG + if(opts->round>ROUND_FULL) + opts->round=ROUND_FULL; +#endif +#ifndef CONFIG_DIALOG + if(MO_GLOW==opts->coloredMouseOver && EFFECT_NONE==opts->buttonEffect) + opts->coloredMouseOver=MO_COLORED_THICK; + + if(IND_GLOW==opts->defBtnIndicator && EFFECT_NONE==opts->buttonEffect) + opts->defBtnIndicator=IND_TINT; + + if(opts->round>ROUND_EXTRA && FOCUS_GLOW!=opts->focus) + opts->focus=FOCUS_LINE; + + if(EFFECT_NONE==opts->buttonEffect) + { + opts->etchEntry=false; + if(FOCUS_GLOW==opts->focus) + opts->focus=FOCUS_FULL; + } + +// if(opts->squareScrollViews) +// opts->highlightScrollViews=false; + + if(SHADE_WINDOW_BORDER==opts->shadeMenubars) + opts->shadeMenubarOnlyWhenActive=true; + + if(MO_GLOW==opts->coloredMouseOver) + opts->coloredTbarMo=true; + + if(opts->roundsquare|=SQUARE_POPUP_MENUS|SQUARE_TOOLTIPS; +#endif + + if(opts->bgndOpacity<0 || opts->bgndOpacity>100) + opts->bgndOpacity=100; + if(opts->dlgOpacity<0 || opts->dlgOpacity>100) + opts->dlgOpacity=100; + if(opts->menuBgndOpacity<0 || opts->menuBgndOpacity>100) + opts->menuBgndOpacity=100; + +#ifndef CONFIG_DIALOG + opts->bgndAppearance=MODIFY_AGUA(opts->bgndAppearance); + opts->selectionAppearance=MODIFY_AGUA(opts->selectionAppearance); + opts->lvAppearance=MODIFY_AGUA_X(opts->lvAppearance, APPEARANCE_LV_AGUA); + opts->sbarBgndAppearance=MODIFY_AGUA(opts->sbarBgndAppearance); + opts->tooltipAppearance=MODIFY_AGUA(opts->tooltipAppearance); + opts->progressGrooveAppearance=MODIFY_AGUA(opts->progressGrooveAppearance); + opts->menuBgndAppearance=MODIFY_AGUA(opts->menuBgndAppearance); + opts->menuStripeAppearance=MODIFY_AGUA(opts->menuStripeAppearance); + opts->grooveAppearance=MODIFY_AGUA(opts->grooveAppearance); + opts->progressAppearance=MODIFY_AGUA(opts->progressAppearance); + opts->sliderFill=MODIFY_AGUA(opts->sliderFill); + opts->tabAppearance=MODIFY_AGUA(opts->tabAppearance); + opts->activeTabAppearance=MODIFY_AGUA(opts->activeTabAppearance); + opts->menuitemAppearance=MODIFY_AGUA(opts->menuitemAppearance); + + if(!opts->borderProgress && (!opts->fillProgress || !(opts->square&SQUARE_PROGRESS))) + opts->borderProgress=true; + + opts->titlebarAppearance=MODIFY_AGUA(opts->titlebarAppearance); + opts->inactiveTitlebarAppearance=MODIFY_AGUA(opts->inactiveTitlebarAppearance); + + if(opts->shadePopupMenu && SHADE_NONE==opts->shadeMenubars) + opts->shadePopupMenu=false; + + if(opts->shadePopupMenu) + opts->lighterPopupMenuBgnd=0; +#ifdef __cplusplus + +#if defined QT_VERSION && QT_VERSION >= 0x040000 + if(!(opts->titlebarButtons&TITLEBAR_BUTTON_ROUND)) +#endif + opts->titlebarButtonAppearance=MODIFY_AGUA(opts->titlebarButtonAppearance); + opts->dwtAppearance=MODIFY_AGUA(opts->dwtAppearance); +#endif + if(opts->windowBorder&WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR && + (opts->windowBorder&WINDOW_BORDER_BLEND_TITLEBAR || SHADE_WINDOW_BORDER==opts->shadeMenubars)) + opts->windowBorder-=WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR; + + if(APPEARANCE_FLAT==opts->tabAppearance) + opts->tabAppearance=APPEARANCE_RAISED; + if(EFFECT_NONE==opts->buttonEffect) + opts->etchEntry=false; + if(opts->colorSliderMouseOver && + (SHADE_NONE==opts->shadeSliders || SHADE_DARKEN==opts->shadeSliders)) + opts->colorSliderMouseOver=false; +#endif /* ndef CONFIG_DIALOG */ + + if(LINE_1DOT==opts->toolbarSeparators) + opts->toolbarSeparators=LINE_DOTS; +} + +#ifdef __cplusplus +static bool readConfig(const QString &file, Options *opts, Options *defOpts=0L) #else -static bool readConfig(const char *file, Options *opts, Options *def) +static bool readConfig(const char *file, Options *opts, Options *defOpts) #endif { #ifdef __cplusplus if(file.isEmpty()) { - const char *xdg=xdgConfigFolder(); + const char *env=getenv("QTCURVE_CONFIG_FILE"); - if(xdg) + if(NULL!=env) + return readConfig(env, opts, defOpts); + else { - QString filename(xdg); + const char *cfgDir=qtcConfDir(); - filename+="/"QTC_FILE; - return readConfig(filename, opts, def); + if(cfgDir) + { + QString filename(QFile::decodeName(cfgDir)+CONFIG_FILE); + + if(!QFile::exists(filename)) + filename=QFile::decodeName(cfgDir)+"../"OLD_CONFIG_FILE; + return readConfig(filename, opts, defOpts); + } } } #else if(!file) { - const char *xdg=xdgConfigFolder(); + const char *env=getenv("QTCURVE_CONFIG_FILE"); - if(xdg) + if(NULL!=env) + return readConfig(env, opts, defOpts); + else { - char filename[QTC_MAX_FILENAME_LEN]; + const char *cfgDir=qtcConfDir(); - sprintf(filename, "%s/"QTC_FILE, xdg); - return readConfig(filename, opts, def); + if(cfgDir) + { + char *filename=(char *)malloc(strlen(cfgDir)+strlen(OLD_CONFIG_FILE)+4); + bool rv=false; + + sprintf(filename, "%s"CONFIG_FILE, cfgDir); + if(!qtcFileExists(filename)) + sprintf(filename, "%s../"OLD_CONFIG_FILE, cfgDir); + rv=readConfig(filename, opts, defOpts); + free(filename); + return rv; + } } } #endif @@ -666,117 +1656,638 @@ static bool readConfig(const char *file, Options *opts, Options *def) if(cfg) { #endif - QTC_CFG_READ_NUM(passwordChar) - QTC_CFG_READ_ROUND(round) - QTC_CFG_READ_DI(highlightFactor) - QTC_CFG_READ_TB_BORDER(toolbarBorders) - QTC_CFG_READ_APPEARANCE(appearance, def->appearance) - QTC_CFG_READ_BOOL(fixParentlessDialogs) - QTC_CFG_READ_STRIPE(stripedProgress) - QTC_CFG_READ_SLIDER(sliderStyle) - QTC_CFG_READ_BOOL(animatedProgress) - QTC_CFG_READ_BOOL(lighterPopupMenuBgnd) - QTC_CFG_READ_BOOL(embolden) - QTC_CFG_READ_DEF_BTN(defBtnIndicator) - QTC_CFG_READ_LINE(sliderThumbs) - QTC_CFG_READ_LINE(handles) - QTC_CFG_READ_BOOL(highlightTab) - QTC_CFG_READ_BOOL(colorSelTab) - QTC_CFG_READ_SHADE(shadeSliders, false) - QTC_CFG_READ_SHADE(shadeMenubars, true) - QTC_CFG_READ_SHADE(shadeCheckRadio, false) - QTC_CFG_READ_APPEARANCE(menubarAppearance, def->menubarAppearance) - QTC_CFG_READ_APPEARANCE(menuitemAppearance, opts->appearance) - QTC_CFG_READ_APPEARANCE(toolbarAppearance, def->toolbarAppearance) - QTC_CFG_READ_LINE(toolbarSeparators) - QTC_CFG_READ_LINE(splitters) - QTC_CFG_READ_BOOL(customMenuTextColor) - QTC_CFG_READ_MOUSE_OVER(coloredMouseOver) - QTC_CFG_READ_BOOL(menubarMouseOver) - QTC_CFG_READ_BOOL(shadeMenubarOnlyWhenActive) - QTC_CFG_READ_BOOL(thinnerMenuItems) - QTC_CFG_READ_COLOR(customSlidersColor) - QTC_CFG_READ_COLOR(customMenubarsColor) - QTC_CFG_READ_COLOR(customMenuSelTextColor) - QTC_CFG_READ_COLOR(customMenuNormTextColor) - QTC_CFG_READ_COLOR(customCheckRadioColor) - QTC_CFG_READ_SCROLLBAR(scrollbarType) - QTC_CFG_READ_EFFECT(buttonEffect) - QTC_CFG_READ_APPEARANCE(lvAppearance, opts->appearance) - QTC_CFG_READ_APPEARANCE(tabAppearance, opts->appearance) - QTC_CFG_READ_APPEARANCE(sliderAppearance, opts->appearance) - QTC_CFG_READ_APPEARANCE(progressAppearance, opts->appearance) -#ifndef QTC_PLAIN_FOCUS_ONLY - QTC_CFG_READ_BOOL(stdFocus) -#endif - QTC_CFG_READ_BOOL(lvLines) - QTC_CFG_READ_BOOL(drawStatusBarFrames) - QTC_CFG_READ_BOOL(fillSlider) - QTC_CFG_READ_BOOL(roundMbTopOnly) - QTC_CFG_READ_BOOL(borderMenuitems) - QTC_CFG_READ_BOOL(gradientPbGroove) - QTC_CFG_READ_BOOL(darkerBorders) - QTC_CFG_READ_BOOL(vArrows) - QTC_CFG_READ_BOOL(xCheck) - QTC_CFG_READ_BOOL(framelessGroupBoxes) - QTC_CFG_READ_BOOL(inactiveHighlight) - QTC_CFG_READ_BOOL(colorMenubarMouseOver) + int i; + + opts->version=readVersionEntry(cfg, VERSION_KEY); + #ifdef __cplusplus - QTC_CFG_READ_BOOL(stdSidebarButtons) - QTC_CFG_READ_BOOL(gtkScrollViews) - QTC_CFG_READ_BOOL(gtkComboMenus) -/* + Options newOpts; + + if(defOpts) + newOpts=*defOpts; + else + defaultSettings(&newOpts); + + Options *def=&newOpts; + + if(opts!=def) + opts->customGradient=def->customGradient; + #else - QTC_CFG_READ_BOOL(setDialogButtonOrder) -*/ -#endif -#if !defined __cplusplus || defined QTC_CONFIG_DIALOG - QTC_CFG_READ_BOOL(mapKdeIcons) + Options newOpts; + Options *def=&newOpts; +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + opts->noDlgFixApps=NULL; #endif -#if defined QTC_CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus - QTC_CFG_READ_BOOL(gtkButtonOrder) + opts->noBgndGradientApps=opts->noBgndOpacityApps=opts->noMenuBgndOpacityApps=opts->noBgndImageApps=opts->noMenuStripeApps=NULL; + for(i=0; icustomGradient[i]=NULL; + + if(defOpts) + copyOpts(defOpts, &newOpts); + else + defaultSettings(&newOpts); + if(opts!=def) + copyGradients(def, opts); #endif - QTC_CFG_READ_SHADING(shading, shading); -#ifndef __cplusplus - releaseConfig(cfg); + /* Check if the config file expects old default values... */ + if(opts->versiongroupBox=framelessGroupBoxes ? (groupBoxLine ? FRAME_LINE : FRAME_NONE) : FRAME_PLAIN; + opts->gbLabel=framelessGroupBoxes ? GB_LBL_BOLD : 0; + opts->gbFactor=0; + def->focus=FOCUS_LINE; + def->crHighlight=3; + } + else + { + CFG_READ_FRAME(groupBox) + CFG_READ_INT(gbLabel) + } + + if(opts->versionwindowBorder= + (readBoolEntry(cfg, "colorTitlebarOnly", def->windowBorder&WINDOW_BORDER_COLOR_TITLEBAR_ONLY) + ? WINDOW_BORDER_COLOR_TITLEBAR_ONLY : 0)+ + (readBoolEntry(cfg, "titlebarBorder", def->windowBorder&WINDOW_BORDER_ADD_LIGHT_BORDER) + ? WINDOW_BORDER_ADD_LIGHT_BORDER : 0)+ + (readBoolEntry(cfg, "titlebarBlend", def->windowBorder&WINDOW_BORDER_BLEND_TITLEBAR) + ? WINDOW_BORDER_BLEND_TITLEBAR : 0); + } + else + CFG_READ_INT(windowBorder); + + if(opts->versionsquare= + (readBoolEntry(cfg, "squareLvSelection", def->square&SQUARE_LISTVIEW_SELECTION) ? SQUARE_LISTVIEW_SELECTION : SQUARE_NONE)+ + (readBoolEntry(cfg, "squareScrollViews", def->square&SQUARE_SCROLLVIEW) ? SQUARE_SCROLLVIEW : SQUARE_NONE)+ + (readBoolEntry(cfg, "squareProgress", def->square&SQUARE_PROGRESS) ? SQUARE_PROGRESS : SQUARE_NONE)+ + (readBoolEntry(cfg, "squareEntry", def->square&SQUARE_ENTRY)? SQUARE_ENTRY : SQUARE_NONE); + } + else + CFG_READ_INT(square) + + if(opts->versionsquare|=SQUARE_TOOLTIPS; + if(opts->versionsquare|=SQUARE_POPUP_MENUS; + if(opts->versioncrSize=CR_SMALL_SIZE; + if(opts->versionroundAllTabs=false; + def->smallRadio=false; + def->splitters=LINE_FLAT; + def->handles=LINE_SUNKEN; + def->crHighlight=0; +#ifdef __cplusplus + def->dwtAppearance=APPEARANCE_FLAT; +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + def->dwtSettings=0; +#endif +#endif + def->inactiveTitlebarAppearance=APPEARANCE_CUSTOM2; + } + if(opts->versiondoubleGtkComboArrow=false; + if(opts->versionmenuStripeAppearance=APPEARANCE_GRADIENT; + def->etchEntry=true; + def->gtkScrollViews=false; + def->thinSbarGroove=false; +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + def->titlebarButtons=TITLEBAR_BUTTON_HOVER_FRAME; + def->titlebarIcon=TITLEBAR_ICON_MENU_BUTTON; +#endif + } + if(opts->versiontabMouseOver=TAB_MO_BOTTOM; + def->activeTabAppearance=APPEARANCE_FLAT; + def->unifySpin=false; + def->unifyCombo=false; + def->borderTab=false; + def->thinnerBtns=false; + } + if(opts->versiontabMouseOver=TAB_MO_TOP; + def->sliderStyle=SLIDER_TRIANGULAR; +#ifdef __cplusplus + def->titlebarAlignment=ALIGN_LEFT; #endif - if(SHADE_SELECTED==opts->shadeCheckRadio) - opts->shadeCheckRadio=SHADE_BLEND_SELECTED; + } + if(opts->versiontitlebarAppearance=APPEARANCE_GRADIENT; + def->inactiveTitlebarAppearance=APPEARANCE_GRADIENT; + def->round=ROUND_FULL; + def->appearance=APPEARANCE_DULL_GLASS; + def->sliderAppearance=APPEARANCE_DULL_GLASS; + def->menuitemAppearance=APPEARANCE_DULL_GLASS; + def->useHighlightForMenu=true; + def->tabAppearance=APPEARANCE_GRADIENT; + def->highlightFactor=5; + def->toolbarSeparators=LINE_NONE; + def->menubarAppearance=APPEARANCE_SOFT_GRADIENT; + def->crButton=false; + def->customShades[0]=0; + def->stripedProgress=STRIPE_DIAGONAL; + def->sunkenAppearance=APPEARANCE_INVERTED; + def->focus=FOCUS_FILLED; + } + if(opts->versioncoloredMouseOver=MO_PLASTIK; + def->buttonEffect=EFFECT_NONE; + def->defBtnIndicator=IND_TINT; + def->vArrows=false; + def->toolbarAppearance=APPEARANCE_GRADIENT; + def->focus=FOCUS_STANDARD; + def->selectionAppearance=APPEARANCE_FLAT; + def->flatSbarButtons=false; + def->comboSplitter=true; + def->handles=LINE_DOTS; + def->lighterPopupMenuBgnd=15; + def->activeTabAppearance=APPEARANCE_GRADIENT; + def->gbLabel=GB_LBL_BOLD; + def->groupBox=FRAME_NONE; + def->shadeSliders=SHADE_BLEND_SELECTED; + def->progressGrooveColor=ECOLOR_BASE; + def->shadeMenubars=SHADE_DARKEN; + opts->highlightTab=true; + } - checkColor(&opts->shadeMenubars, &opts->customMenubarsColor); - checkColor(&opts->shadeSliders, &opts->customSlidersColor); - checkColor(&opts->shadeCheckRadio, &opts->customCheckRadioColor); + if(opts!=def) + { + opts->customShades[0]=0; + opts->customAlphas[0]=0; + if(USE_CUSTOM_SHADES(*def)) + memcpy(opts->customShades, def->customShades, sizeof(double)*NUM_STD_SHADES); + } - if(APPEARANCE_BEVELLED==opts->toolbarAppearance) - opts->toolbarAppearance=APPEARANCE_GRADIENT; - else if(APPEARANCE_RAISED==opts->toolbarAppearance) - opts->toolbarAppearance=APPEARANCE_FLAT; + CFG_READ_INT(gbFactor) + CFG_READ_INT(passwordChar) + CFG_READ_ROUND(round) + CFG_READ_INT(highlightFactor) + CFG_READ_INT(menuDelay) + CFG_READ_INT(sliderWidth) + CFG_READ_INT_BOOL(lighterPopupMenuBgnd, def->lighterPopupMenuBgnd) + CFG_READ_INT(tabBgnd) + CFG_READ_TB_BORDER(toolbarBorders) + CFG_READ_APPEARANCE(appearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(bgndAppearance, APP_ALLOW_STRIPED) + CFG_READ_GRAD_TYPE(bgndGrad) + CFG_READ_GRAD_TYPE(menuBgndGrad) + CFG_READ_APPEARANCE(menuBgndAppearance, APP_ALLOW_STRIPED) +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT + CFG_READ_BOOL(fixParentlessDialogs) + CFG_READ_STRING_LIST(noDlgFixApps) +#endif + CFG_READ_STRIPE(stripedProgress) + CFG_READ_SLIDER(sliderStyle) + CFG_READ_BOOL(animatedProgress) + CFG_READ_BOOL(embolden) + CFG_READ_DEF_BTN(defBtnIndicator) + CFG_READ_LINE(sliderThumbs) + CFG_READ_LINE(handles) + CFG_READ_BOOL(highlightTab) + CFG_READ_INT_BOOL(colorSelTab, DEF_COLOR_SEL_TAB_FACTOR) + CFG_READ_BOOL(roundAllTabs) + CFG_READ_TAB_MO(tabMouseOver) + CFG_READ_SHADE(shadeSliders, true, false, &opts->customSlidersColor) + CFG_READ_SHADE(shadeMenubars, true, false, &opts->customMenubarsColor) + CFG_READ_SHADE(shadeCheckRadio, false, false, &opts->customCheckRadioColor) + CFG_READ_SHADE(sortedLv, true, false, &opts->customSortedLvColor) + CFG_READ_SHADE(crColor, true, false, &opts->customCrBgndColor) + CFG_READ_SHADE(progressColor, false, false, &opts->customProgressColor) + CFG_READ_APPEARANCE(menubarAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(menuitemAppearance, APP_ALLOW_FADE) + CFG_READ_APPEARANCE(toolbarAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(selectionAppearance, APP_ALLOW_BASIC) +#ifdef __cplusplus + CFG_READ_APPEARANCE(dwtAppearance, APP_ALLOW_BASIC) +#endif + CFG_READ_LINE(toolbarSeparators) + CFG_READ_LINE(splitters) + CFG_READ_BOOL(customMenuTextColor) + CFG_READ_MOUSE_OVER(coloredMouseOver) + CFG_READ_BOOL(menubarMouseOver) + CFG_READ_BOOL(useHighlightForMenu) + CFG_READ_BOOL(shadeMenubarOnlyWhenActive) + CFG_READ_BOOL(thinnerMenuItems) + CFG_READ_BOOL(thinnerBtns) + if(opts->versioncustomSlidersColor)) + CFG_READ_COLOR(customSlidersColor) + if(IS_BLACK(opts->customMenubarsColor)) + CFG_READ_COLOR(customMenubarsColor) + if(IS_BLACK(opts->customCheckRadioColor)) + CFG_READ_COLOR(customCheckRadioColor) + } + CFG_READ_COLOR(customMenuSelTextColor) + CFG_READ_COLOR(customMenuNormTextColor) + CFG_READ_SCROLLBAR(scrollbarType) + CFG_READ_EFFECT(buttonEffect) + CFG_READ_APPEARANCE(lvAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(tabAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(activeTabAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(sliderAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(progressAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(progressGrooveAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(grooveAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(sunkenAppearance, APP_ALLOW_BASIC) + CFG_READ_APPEARANCE(sbarBgndAppearance, APP_ALLOW_BASIC) + if(opts->versiontooltipAppearance=APPEARANCE_FLAT; + else + { + CFG_READ_APPEARANCE(tooltipAppearance, APP_ALLOW_BASIC) + } - if(APPEARANCE_BEVELLED==opts->menubarAppearance) - opts->menubarAppearance=APPEARANCE_GRADIENT; - else if(APPEARANCE_RAISED==opts->menubarAppearance) - opts->menubarAppearance=APPEARANCE_FLAT; + if(opts->versionsliderFill=IS_FLAT(opts->appearance) ? opts->grooveAppearance : APPEARANCE_GRADIENT; + else + { + CFG_READ_APPEARANCE(sliderFill, APP_ALLOW_BASIC) + } + CFG_READ_ECOLOR(progressGrooveColor) + CFG_READ_FOCUS(focus) + CFG_READ_BOOL(lvButton) + CFG_READ_LV_LINES(lvLines) + CFG_READ_BOOL(drawStatusBarFrames) + CFG_READ_BOOL(fillSlider) + CFG_READ_BOOL(roundMbTopOnly) + CFG_READ_BOOL(borderMenuitems) + CFG_READ_BOOL(darkerBorders) + CFG_READ_BOOL(vArrows) + CFG_READ_BOOL(xCheck) +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus + CFG_READ_BOOL(fadeLines) + CFG_READ_GLOW(glowProgress) +#endif + CFG_READ_BOOL(colorMenubarMouseOver) + CFG_READ_INT_BOOL(crHighlight, opts->highlightFactor) + CFG_READ_BOOL(crButton) + CFG_READ_BOOL(smallRadio) + CFG_READ_BOOL(fillProgress) + CFG_READ_BOOL(comboSplitter) + CFG_READ_BOOL(highlightScrollViews) + CFG_READ_BOOL(etchEntry) + CFG_READ_INT_BOOL(splitterHighlight, opts->highlightFactor) + CFG_READ_INT(crSize) + CFG_READ_BOOL(flatSbarButtons) + CFG_READ_BOOL(borderSbarGroove) + CFG_READ_BOOL(borderProgress) + CFG_READ_BOOL(popupBorder) + CFG_READ_BOOL(unifySpinBtns) + CFG_READ_BOOL(unifySpin) + CFG_READ_BOOL(unifyCombo) + CFG_READ_BOOL(borderTab) + CFG_READ_BOOL(borderInactiveTab) + CFG_READ_BOOL(thinSbarGroove) + CFG_READ_BOOL(colorSliderMouseOver) + CFG_READ_BOOL(menuIcons) + CFG_READ_BOOL(forceAlternateLvCols) + CFG_READ_BOOL(invertBotTab) + CFG_READ_INT_BOOL(menubarHiding, HIDE_KEYBOARD) + CFG_READ_INT_BOOL(statusbarHiding, HIDE_KEYBOARD) + CFG_READ_BOOL(boldProgress) + CFG_READ_BOOL(coloredTbarMo) + CFG_READ_BOOL(borderSelection) + CFG_READ_BOOL(stripedSbar) + CFG_READ_INT_BOOL(windowDrag, WM_DRAG_MENUBAR) + CFG_READ_BOOL(shadePopupMenu) + +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + CFG_READ_BOOL(stdBtnSizes) + CFG_READ_INT(titlebarButtons) + CFG_READ_TB_ICON(titlebarIcon) +#endif +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + CFG_READ_BOOL(xbar) + CFG_READ_INT(dwtSettings) +#endif + CFG_READ_INT(bgndOpacity) + CFG_READ_INT(menuBgndOpacity) + CFG_READ_INT(dlgOpacity) + CFG_READ_SHADE(menuStripe, true, true, &opts->customMenuStripeColor) + CFG_READ_APPEARANCE(menuStripeAppearance, APP_ALLOW_BASIC) + if(opts->versioncustomMenuStripeColor)) + CFG_READ_COLOR(customMenuStripeColor) + CFG_READ_SHADE(comboBtn, true, false, &opts->customComboBtnColor); + CFG_READ_BOOL(gtkScrollViews) + CFG_READ_BOOL(doubleGtkComboArrow) + CFG_READ_BOOL(stdSidebarButtons) + CFG_READ_BOOL(toolbarTabs) +#ifdef __cplusplus + CFG_READ_ALIGN(titlebarAlignment) + CFG_READ_EFFECT(titlebarEffect) + CFG_READ_BOOL(gtkComboMenus) + CFG_READ_BOOL(centerTabText) +/* +#else + CFG_READ_BOOL(setDialogButtonOrder) +*/ +#endif +#if !defined __cplusplus || defined CONFIG_DIALOG + CFG_READ_INT(expanderHighlight) + CFG_READ_BOOL(mapKdeIcons) +#endif +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus + CFG_READ_BOOL(gtkButtonOrder) +#endif +#if !defined __cplusplus || (defined CONFIG_DIALOG && defined QT_VERSION && (QT_VERSION >= 0x040000)) + CFG_READ_BOOL(reorderGtkButtons) +#endif + CFG_READ_APPEARANCE(titlebarAppearance, APP_ALLOW_NONE) + CFG_READ_APPEARANCE(inactiveTitlebarAppearance, APP_ALLOW_NONE) + + if(APPEARANCE_BEVELLED==opts->titlebarAppearance) + opts->titlebarAppearance=APPEARANCE_GRADIENT; + else if(APPEARANCE_RAISED==opts->titlebarAppearance) + opts->titlebarAppearance=APPEARANCE_FLAT; + if((opts->windowBorder&WINDOW_BORDER_BLEND_TITLEBAR) && !(opts->windowBorder&WINDOW_BORDER_COLOR_TITLEBAR_ONLY)) + opts->windowBorder-=WINDOW_BORDER_BLEND_TITLEBAR; + if(APPEARANCE_BEVELLED==opts->inactiveTitlebarAppearance) + opts->inactiveTitlebarAppearance=APPEARANCE_GRADIENT; + else if(APPEARANCE_RAISED==opts->inactiveTitlebarAppearance) + opts->inactiveTitlebarAppearance=APPEARANCE_FLAT; +#ifdef __cplusplus + CFG_READ_APPEARANCE(titlebarButtonAppearance, APP_ALLOW_BASIC) +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + if(opts->xbar && opts->menubarHiding) + opts->xbar=false; +#endif +#endif + CFG_READ_SHADING(shading) + CFG_READ_IMAGE(bgndImage) + CFG_READ_IMAGE(menuBgndImage) + CFG_READ_STRING_LIST(noMenuStripeApps) +#if !defined __cplusplus || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + CFG_READ_STRING_LIST(noBgndGradientApps) + CFG_READ_STRING_LIST(noBgndOpacityApps) + CFG_READ_STRING_LIST(noMenuBgndOpacityApps) + CFG_READ_STRING_LIST(noBgndImageApps) +#endif +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + CFG_READ_STRING_LIST(menubarApps) + CFG_READ_STRING_LIST(statusbarApps) + CFG_READ_STRING_LIST(useQtFileDialogApps) + CFG_READ_STRING_LIST(windowDragWhiteList) + CFG_READ_STRING_LIST(windowDragBlackList) +#endif + readDoubleList(cfg, "customShades", opts->customShades, NUM_STD_SHADES); + readDoubleList(cfg, "customAlphas", opts->customAlphas, NUM_STD_ALPHAS); + +#ifdef __cplusplus +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + if(opts->titlebarButtons&TITLEBAR_BUTTON_COLOR || opts->titlebarButtons&TITLEBAR_BUTTON_ICON_COLOR) + { +#if (defined QT_VERSION && (QT_VERSION >= 0x040000)) + QStringList cols(readStringEntry(cfg, "titlebarButtonColors").split(',', QString::SkipEmptyParts)); +#else + QStringList cols(QStringList::split(',', readStringEntry(cfg, "titlebarButtonColors"))); +#endif + if(cols.count() && 0==(cols.count()%NUM_TITLEBAR_BUTTONS) && cols.count()<=(NUM_TITLEBAR_BUTTONS*3)) + { + QStringList::ConstIterator it(cols.begin()), + end(cols.end()); + + for(int i=0; it!=end; ++it, ++i) + { + QColor col; + setRgb(&col, TO_LATIN1((*it))); + opts->titlebarButtonColors[i]=col; + } + if(cols.count()<(NUM_TITLEBAR_BUTTONS+1)) + opts->titlebarButtons&=~TITLEBAR_BUTTON_ICON_COLOR; + } + else + { + opts->titlebarButtons&=~TITLEBAR_BUTTON_COLOR; + opts->titlebarButtons&=~TITLEBAR_BUTTON_ICON_COLOR; + } + } +#endif - if(APPEARANCE_BEVELLED==opts->sliderAppearance) - opts->sliderAppearance=APPEARANCE_GRADIENT; + for(i=APPEARANCE_CUSTOM1; i<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD); ++i) + { + QString gradKey; - if(APPEARANCE_BEVELLED==opts->tabAppearance) - opts->tabAppearance=APPEARANCE_GRADIENT; + gradKey.sprintf("customgradient%d", (i-APPEARANCE_CUSTOM1)+1); - if(opts->highlightFactor<((100.0+MIN_HIGHLIGHT_FACTOR)/100.0) || - opts->highlightFactor>((100.0+MAX_HIGHLIGHT_FACTOR)/100.0)) - opts->highlightFactor=DEFAULT_HIGHLIGHT_FACTOR; +#if (defined QT_VERSION && (QT_VERSION >= 0x040000)) + QStringList vals(readStringEntry(cfg, gradKey).split(',', QString::SkipEmptyParts)); +#else + QStringList vals(QStringList::split(',', readStringEntry(cfg, gradKey))); +#endif - if(opts->animatedProgress && !opts->stripedProgress) - opts->animatedProgress=false; + if(vals.size()) + opts->customGradient.erase((EAppearance)i); + + if(vals.size()>=5) + { + QStringList::ConstIterator it(vals.begin()), + end(vals.end()); + bool ok(true), + haveAlpha(false); + Gradient grad; + int j; + + grad.border=toGradientBorder(TO_LATIN1((*it)), &haveAlpha); + ok=vals.size()%(haveAlpha ? 3 : 2); + + for(++it, j=0; it!=end && ok; ++it, ++j) + { + double pos=(*it).toDouble(&ok), + val=ok ? (*(++it)).toDouble(&ok) : 0.0, + alpha=haveAlpha && ok ? (*(++it)).toDouble(&ok) : 1.0; + + ok=ok && (pos>=0 && pos<=1.0) && (val>=0.0 && val<=2.0) && (alpha>=0.0 && alpha<=1.0); + + if(ok) + grad.stops.insert(GradientStop(pos, val, alpha)); + } + + if(ok) + { + opts->customGradient[(EAppearance)i]=grad; + opts->customGradient[(EAppearance)i].stops=grad.stops.fix(); + } + } + } +#else + for(i=0; icustomGradient[i]) + { + if(opts->customGradient[i]->stops) + free(opts->customGradient[i]->stops); + free(opts->customGradient[i]); + opts->customGradient[i]=0L; + } + + if(comma>=4) + { + char *c=strchr(str, ','); + + if(c) + { + bool haveAlpha=false; + EGradientBorder border=toGradientBorder(str, &haveAlpha); + int parts=haveAlpha ? 3 : 2; + bool ok=0==comma%parts; + + *c='\0'; + + if(ok) + { + opts->customGradient[i]=malloc(sizeof(Gradient)); + opts->customGradient[i]->numStops=comma/parts; + opts->customGradient[i]->stops=malloc(sizeof(GradientStop) * opts->customGradient[i]->numStops); + opts->customGradient[i]->border=border; + str=c+1; + for(j=0; jcustomGradient[i]->stops[stop].pos=g_ascii_strtod(str, NULL); + str=c+1; + c=str ? strchr(str, ',') : 0L; + + if(c || str) + { + if(c) + *c='\0'; + opts->customGradient[i]->stops[stop].val=g_ascii_strtod(str, NULL); + str=c ? c+1 : c; + if(haveAlpha) + { + c=str ? strchr(str, ',') : 0L; + if(c || str) + { + if(c) + *c='\0'; + opts->customGradient[i]->stops[stop].alpha=g_ascii_strtod(str, NULL); + str=c ? c+1 : c; + } + else + ok=false; + } + else + opts->customGradient[i]->stops[stop].alpha=1.0; + } + else + ok=false; + } + else + ok=false; + + ok=ok && + (opts->customGradient[i]->stops[stop].pos>=0 && opts->customGradient[i]->stops[stop].pos<=1.0) && + (opts->customGradient[i]->stops[stop].val>=0.0 && opts->customGradient[i]->stops[stop].val<=2.0) && + (opts->customGradient[i]->stops[stop].alpha>=0.0 && opts->customGradient[i]->stops[stop].alpha<=1.0); + } + + if(ok) + { + int addStart=0, + addEnd=0; + if(opts->customGradient[i]->stops[0].pos>0.001) + addStart=1; + if(opts->customGradient[i]->stops[opts->customGradient[i]->numStops-1].pos<0.999) + addEnd=1; + + if(addStart || addEnd) + { + int newSize=opts->customGradient[i]->numStops+addStart+addEnd; + GradientStop *stops=malloc(sizeof(GradientStop) * newSize); + + if(addStart) + { + stops[0].pos=0.0; + stops[0].val=1.0; + stops[0].alpha=1.0; + } + memcpy(&stops[addStart], opts->customGradient[i]->stops, sizeof(GradientStop) * opts->customGradient[i]->numStops); + if(addEnd) + { + stops[opts->customGradient[i]->numStops+addStart].pos=1.0; + stops[opts->customGradient[i]->numStops+addStart].val=1.0; + stops[opts->customGradient[i]->numStops+addStart].alpha=1.0; + } + opts->customGradient[i]->numStops=newSize; + free(opts->customGradient[i]->stops); + opts->customGradient[i]->stops=stops; + } + } + else + { + free(opts->customGradient[i]->stops); + free(opts->customGradient[i]); + opts->customGradient[i]=0L; + } + } + } + } + } + } +#endif - if(opts->colorSelTab && APPEARANCE_GRADIENT!=opts->tabAppearance) - opts->colorSelTab=false; + checkConfig(opts); - if(SHADE_CUSTOM==opts->shadeMenubars || SHADE_BLEND_SELECTED==opts->shadeMenubars || !opts->borderMenuitems) - opts->colorMenubarMouseOver=true; +#ifndef __cplusplus + if(!defOpts) + { + int i; + for(i=0; icustomGradient[i]) + free(def->customGradient[i]); + } + releaseConfig(cfg); + freeOpts(defOpts); +#endif + return true; + } + else + { +#ifdef __cplusplus + if(defOpts) + *opts=*defOpts; + else + defaultSettings(opts); +#else + if(defOpts) + copyOpts(defOpts, opts); + else + defaultSettings(opts); +#endif return true; } } @@ -793,7 +2304,7 @@ static bool fileExists(const char *path) static const char * getSystemConfigFile() { - static const char * constFiles[]={ "/etc/qt4/"QTC_FILE, "/etc/qt3/"QTC_FILE, "/etc/qt/"QTC_FILE, NULL }; + static const char * constFiles[]={ /*"/etc/qt4/"OLD_CONFIG_FILE, "/etc/qt3/"OLD_CONFIG_FILE, "/etc/qt/"OLD_CONFIG_FILE,*/ "/etc/"OLD_CONFIG_FILE, NULL }; int i; @@ -806,70 +2317,199 @@ static const char * getSystemConfigFile() static void defaultSettings(Options *opts) { /* Set hard-coded defaults... */ +#ifndef __cplusplus + int i; + + for(i=0; icustomGradient[i]=0L; + opts->customGradient[APPEARANCE_CUSTOM1]=malloc(sizeof(Gradient)); + opts->customGradient[APPEARANCE_CUSTOM2]=malloc(sizeof(Gradient)); + setupGradient(opts->customGradient[APPEARANCE_CUSTOM1], GB_3D,3,0.0,1.2,0.5,1.0,1.0,1.0); + setupGradient(opts->customGradient[APPEARANCE_CUSTOM2], GB_3D,3,0.0,0.9,0.5,1.0,1.0,1.0); +#else + // Setup titlebar gradients... + setupGradient(&(opts->customGradient[APPEARANCE_CUSTOM1]), GB_3D,3,0.0,1.2,0.5,1.0,1.0,1.0); + setupGradient(&(opts->customGradient[APPEARANCE_CUSTOM2]), GB_3D,3,0.0,0.9,0.5,1.0,1.0,1.0); +#endif + opts->customShades[0]=1.16; + opts->customShades[1]=1.07; + opts->customShades[2]=0.9; + opts->customShades[3]=0.78; + opts->customShades[4]=0.84; + opts->customShades[5]=0.75; + opts->customAlphas[0]=0; opts->contrast=7; opts->passwordChar=0x25CF; + opts->gbFactor=DEF_GB_FACTOR; opts->highlightFactor=DEFAULT_HIGHLIGHT_FACTOR; + opts->crHighlight=DEFAULT_CR_HIGHLIGHT_FACTOR; + opts->splitterHighlight=DEFAULT_SPLITTER_HIGHLIGHT_FACTOR; + opts->crSize=CR_LARGE_SIZE; + opts->menuDelay=DEFAULT_MENU_DELAY; + opts->sliderWidth=DEFAULT_SLIDER_WIDTH; + opts->selectionAppearance=APPEARANCE_HARSH_GRADIENT; +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus + opts->round=ROUND_EXTRA; + opts->fadeLines=true; + opts->glowProgress=GLOW_NONE; + opts->gtkButtonOrder=false; +#else opts->round=ROUND_FULL; - opts->lighterPopupMenuBgnd=true; - opts->animatedProgress=true; - opts->stripedProgress=STRIPE_DIAGONAL; - opts->sliderStyle=SLIDER_TRIANGULAR; - opts->highlightTab=true; - opts->colorSelTab=false; +#endif +#ifdef __cplusplus + opts->dwtAppearance=APPEARANCE_CUSTOM1; +#endif +#if !defined __cplusplus || (defined CONFIG_DIALOG && defined QT_VERSION && (QT_VERSION >= 0x040000)) + opts->reorderGtkButtons=false; +#endif + opts->bgndImage.type=IMG_NONE; + opts->menuBgndImage.type=IMG_NONE; + opts->lighterPopupMenuBgnd=DEF_POPUPMENU_LIGHT_FACTOR; + opts->tabBgnd=DEF_TAB_BGND; + opts->animatedProgress=false; + opts->stripedProgress=STRIPE_NONE; + opts->sliderStyle=SLIDER_PLAIN; + opts->highlightTab=false; + opts->colorSelTab=0; + opts->roundAllTabs=true; + opts->tabMouseOver=TAB_MO_GLOW; opts->embolden=false; - opts->appearance=APPEARANCE_DULL_GLASS; + opts->bgndGrad=GT_HORIZ; + opts->menuBgndGrad=GT_HORIZ; + opts->appearance=APPEARANCE_SOFT_GRADIENT; + opts->bgndAppearance=APPEARANCE_FLAT; + opts->menuBgndAppearance=APPEARANCE_FLAT; opts->lvAppearance=APPEARANCE_BEVELLED; - opts->tabAppearance=APPEARANCE_GRADIENT; - opts->sliderAppearance=APPEARANCE_DULL_GLASS; - opts->menubarAppearance=APPEARANCE_GRADIENT; - opts->menuitemAppearance=APPEARANCE_DULL_GLASS; + opts->tabAppearance=APPEARANCE_SOFT_GRADIENT; + opts->activeTabAppearance=APPEARANCE_SOFT_GRADIENT; + opts->sliderAppearance=APPEARANCE_SOFT_GRADIENT; + opts->menubarAppearance=APPEARANCE_FLAT; + opts->menuitemAppearance=APPEARANCE_FADE; opts->toolbarAppearance=APPEARANCE_FLAT; opts->progressAppearance=APPEARANCE_DULL_GLASS; - opts->defBtnIndicator=IND_COLORED; + opts->progressGrooveAppearance=APPEARANCE_INVERTED; + opts->progressGrooveColor=ECOLOR_DARK; + opts->grooveAppearance=APPEARANCE_INVERTED; + opts->sunkenAppearance=APPEARANCE_SOFT_GRADIENT; + opts->sbarBgndAppearance=APPEARANCE_FLAT; + opts->tooltipAppearance=APPEARANCE_GRADIENT; + opts->sliderFill=APPEARANCE_GRADIENT; + opts->defBtnIndicator=IND_GLOW; opts->sliderThumbs=LINE_FLAT; - opts->handles=LINE_SUNKEN; - opts->shadeSliders=SHADE_BLEND_SELECTED; + opts->handles=LINE_1DOT; + opts->shadeSliders=SHADE_NONE; opts->shadeMenubars=SHADE_NONE; opts->shadeCheckRadio=SHADE_NONE; + opts->sortedLv=SHADE_NONE; opts->toolbarBorders=TB_NONE; - opts->toolbarSeparators=LINE_NONE; - opts->splitters=LINE_FLAT; + opts->toolbarSeparators=LINE_SUNKEN; + opts->splitters=LINE_1DOT; +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT opts->fixParentlessDialogs=false; +#ifdef __cplusplus + opts->noDlgFixApps << "kate" << "plasma" << "plasma-desktop" << "plasma-netbook"; +#else + opts->noDlgFixApps=NULL; +#endif +#endif opts->customMenuTextColor=false; - opts->coloredMouseOver=MO_PLASTIK; + opts->coloredMouseOver=MO_GLOW; opts->menubarMouseOver=true; - opts->shadeMenubarOnlyWhenActive=true; + opts->useHighlightForMenu=false; + opts->shadeMenubarOnlyWhenActive=false; opts->thinnerMenuItems=false; + opts->thinnerBtns=true; opts->scrollbarType=SCROLLBAR_KDE; - opts->buttonEffect=EFFECT_NONE; -#ifndef QTC_PLAIN_FOCUS_ONLY - opts->stdFocus=true; -#endif - opts->lvLines=false; + opts->buttonEffect=EFFECT_SHADOW; + opts->focus=FOCUS_GLOW; + opts->lvButton=false; + opts->lvLines=LV_NONE; opts->drawStatusBarFrames=false; opts->fillSlider=true; opts->roundMbTopOnly=true; - opts->borderMenuitems=true; - opts->gradientPbGroove=true; + opts->borderMenuitems=false; opts->darkerBorders=false; - opts->vArrows=false; + opts->vArrows=true; opts->xCheck=false; - opts->framelessGroupBoxes=false; - opts->colorMenubarMouseOver=false; - opts->inactiveHighlight=false; -#ifdef QTC_CONFIG_DIALOG - opts->shading=SHADING_HSL; + opts->colorMenubarMouseOver=true; + opts->crButton=true; + opts->crColor=SHADE_NONE; + opts->progressColor=SHADE_SELECTED; + opts->smallRadio=true; + opts->fillProgress=true; + opts->comboSplitter=false; + opts->highlightScrollViews=false; + opts->etchEntry=false; + opts->flatSbarButtons=true; + opts->borderSbarGroove=true; + opts->borderProgress=true; + opts->popupBorder=true; + opts->unifySpinBtns=false; + opts->unifySpin=true; + opts->unifyCombo=true; + opts->borderTab=true; + opts->borderInactiveTab=false; + opts->thinSbarGroove=true; + opts->colorSliderMouseOver=false; + opts->menuIcons=true; + opts->forceAlternateLvCols=false; + opts->invertBotTab=true; + opts->menubarHiding=HIDE_NONE; + opts->statusbarHiding=HIDE_NONE; + opts->boldProgress=true; + opts->coloredTbarMo=false; + opts->borderSelection=false; + opts->square=SQUARE_POPUP_MENUS; + opts->stripedSbar=false; + opts->windowDrag=WM_DRAG_NONE; + opts->shadePopupMenu=false; + opts->windowBorder=WINDOW_BORDER_ADD_LIGHT_BORDER; + opts->groupBox=FRAME_FADED; + opts->gbFactor=DEF_GB_FACTOR; + opts->gbLabel=GB_LBL_BOLD|GB_LBL_OUTSIDE; +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + opts->stdBtnSizes=false; + opts->titlebarButtons=TITLEBAR_BUTTON_ROUND|TITLEBAR_BUTTON_HOVER_SYMBOL; + opts->titlebarIcon=TITLEBAR_ICON_NEXT_TO_TITLE; #endif -#ifdef __cplusplus + opts->menuStripe=SHADE_NONE; + opts->menuStripeAppearance=APPEARANCE_DARK_INVERTED; + opts->shading=SHADING_HSL; + opts->gtkScrollViews=true; + opts->comboBtn=SHADE_NONE; + opts->doubleGtkComboArrow=true; opts->stdSidebarButtons=false; - opts->gtkScrollViews=false; + opts->toolbarTabs=false; + opts->bgndOpacity=opts->dlgOpacity=opts->menuBgndOpacity=100; +#ifdef __cplusplus opts->gtkComboMenus=false; opts->customMenubarsColor.setRgb(0, 0, 0); opts->customSlidersColor.setRgb(0, 0, 0); opts->customMenuNormTextColor.setRgb(0, 0, 0); opts->customMenuSelTextColor.setRgb(0, 0, 0); opts->customCheckRadioColor.setRgb(0, 0, 0); + opts->customComboBtnColor.setRgb(0, 0, 0); + opts->customMenuStripeColor.setRgb(0, 0, 0); + opts->customProgressColor.setRgb(0, 0, 0); + opts->titlebarAlignment=ALIGN_FULL_CENTER; + opts->titlebarEffect=EFFECT_SHADOW; + opts->centerTabText=false; +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + opts->xbar=false; + opts->dwtSettings=DWT_BUTTONS_AS_PER_TITLEBAR|DWT_ROUND_TOP_ONLY; + opts->menubarApps << "amarok" << "arora" << "kaffeine" << "kcalc" << "smplayer" << "VirtualBox"; + opts->statusbarApps << "kde"; + opts->useQtFileDialogApps << "googleearth-bin"; + opts->noMenuBgndOpacityApps << "inkscape" << "inkscape" << "sonata" << "totem"; + opts->noBgndOpacityApps << "smplayer" << "kaffeine" << "dragon" << "kscreenlocker" << "inkscape" << "inkscape" << "sonata" << "totem"; +#endif + opts->noMenuStripeApps << "gtk" << "soffice.bin"; #else + opts->noBgndGradientApps=NULL; + opts->noBgndOpacityApps=g_strsplit("inkscape,sonata,totem",",", -1);; + opts->noBgndImageApps=NULL; + opts->noMenuStripeApps=g_strsplit("gtk",",", -1); + opts->noMenuBgndOpacityApps=g_strsplit("inkscape,sonata,totem",",", -1); /* opts->setDialogButtonOrder=false; */ @@ -878,15 +2518,20 @@ static void defaultSettings(Options *opts) opts->customMenuNormTextColor.red=opts->customMenuNormTextColor.green=opts->customMenuNormTextColor.blue=0; opts->customMenuSelTextColor.red=opts->customMenuSelTextColor.green=opts->customMenuSelTextColor.blue=0; opts->customCheckRadioColor.red=opts->customCheckRadioColor.green=opts->customCheckRadioColor.blue=0; + opts->customComboBtnColor.red=opts->customCheckRadioColor.green=opts->customCheckRadioColor.blue=0; + opts->customMenuStripeColor.red=opts->customMenuStripeColor.green=opts->customMenuStripeColor.blue=0; + opts->customProgressColor.red=opts->customProgressColor.green=opts->customProgressColor.blue=0; #endif -#if !defined __cplusplus || defined QTC_CONFIG_DIALOG +#if !defined __cplusplus || defined CONFIG_DIALOG opts->mapKdeIcons=true; + opts->expanderHighlight=DEFAULT_EXPANDER_HIGHLIGHT_FACTOR; #endif -#if defined QTC_CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) || !defined __cplusplus - opts->gtkButtonOrder=false; + opts->titlebarAppearance=APPEARANCE_CUSTOM1; + opts->inactiveTitlebarAppearance=APPEARANCE_CUSTOM1; +#ifdef __cplusplus + opts->titlebarButtonAppearance=APPEARANCE_GRADIENT; #endif - /* Read system config file... */ { static const char * systemFilename=NULL; @@ -897,6 +2542,11 @@ static void defaultSettings(Options *opts) if(systemFilename) readConfig(systemFilename, opts, opts); } + +#if !defined CONFIG_DIALOG && defined QT_VERSION && (QT_VERSION < 0x040000) + if(FOCUS_FILLED==opts->focus) + opts->focus=FOCUS_FULL; +#endif } #endif @@ -912,19 +2562,31 @@ static const char *toStr(EDefBtnIndicator ind) return "fontcolor"; case IND_CORNER: return "corner"; + case IND_TINT: + return "tint"; + case IND_GLOW: + return "glow"; + case IND_DARKEN: + return "darken"; + case IND_SELECTED: + return "origselected"; default: return "colored"; } } -static const char *toStr(ELine ind, bool none) +static const char *toStr(ELine ind, bool dashes) { switch(ind) { + case LINE_1DOT: + return "1dot"; case LINE_DOTS: return "dots"; case LINE_DASHES: - return none ? "none" : "dashes"; + return dashes ? "dashes" : "none"; + case LINE_NONE: + return "none"; case LINE_FLAT: return "flat"; default: @@ -955,14 +2617,18 @@ static const char *toStr(EMouseOver mo) { case MO_COLORED: return "colored"; + case MO_COLORED_THICK: + return "thickcolored"; case MO_NONE: return "none"; + case MO_GLOW: + return "glow"; default: return "plastik"; } } -static const char *toStr(EAppearance exp) +static QString toStr(EAppearance exp, EAppAllow allow) { switch(exp) { @@ -970,22 +2636,56 @@ static const char *toStr(EAppearance exp) return "flat"; case APPEARANCE_RAISED: return "raised"; + case APPEARANCE_DULL_GLASS: + return "dullglass"; + case APPEARANCE_SHINY_GLASS: + return "shinyglass"; + case APPEARANCE_AGUA: + return "agua"; + case APPEARANCE_SOFT_GRADIENT: + return "soft"; case APPEARANCE_GRADIENT: return "gradient"; + case APPEARANCE_HARSH_GRADIENT: + return "harsh"; + case APPEARANCE_INVERTED: + return "inverted"; + case APPEARANCE_DARK_INVERTED: + return "darkinverted"; case APPEARANCE_SPLIT_GRADIENT: return "splitgradient"; - case APPEARANCE_DULL_GLASS: - return "dullglass"; case APPEARANCE_BEVELLED: return "bevelled"; - case APPEARANCE_INVERTED: - return "inverted"; + case APPEARANCE_FADE: + switch(allow) + { + case APP_ALLOW_BASIC: // Should not get here! + case APP_ALLOW_FADE: + return "fade"; + case APP_ALLOW_STRIPED: + return "striped"; + case APP_ALLOW_NONE: + return "none"; + } default: - return "shinyglass"; + { + QString app; + + app.sprintf("customgradient%d", (exp-APPEARANCE_CUSTOM1)+1); + return app; + } } } -static const char *toStr(EShade exp, bool dark, bool convertBlendSelToSel) +static QString toStr(const QColor &col) +{ + QString colorStr; + + colorStr.sprintf("#%02X%02X%02X", col.red(), col.green(), col.blue()); + return colorStr; +} + +static QString toStr(EShade exp, const QColor &col) { switch(exp) { @@ -993,12 +2693,15 @@ static const char *toStr(EShade exp, bool dark, bool convertBlendSelToSel) case SHADE_NONE: return "none"; case SHADE_BLEND_SELECTED: - return dark || !convertBlendSelToSel ? "selected" : "origselected"; + return "selected"; case SHADE_CUSTOM: - return "custom"; - /* case SHADE_SELECTED */ + return toStr(col); + case SHADE_SELECTED: + return "origselected"; case SHADE_DARKEN: - return dark ? "darken" : "origselected"; + return "darken"; + case SHADE_WINDOW_BORDER: + return "wborder"; } } @@ -1010,6 +2713,10 @@ static const char *toStr(ERound exp) return "none"; case ROUND_SLIGHT: return "slight"; + case ROUND_EXTRA: + return "extra"; + case ROUND_MAX: + return "max"; default: case ROUND_FULL: return "full"; @@ -1034,6 +2741,24 @@ static const char *toStr(EScrollbar sb) } } +static const char *toStr(EFrame sb) +{ + switch(sb) + { + case FRAME_NONE: + return "none"; + case FRAME_PLAIN: + return "plain"; + case FRAME_LINE: + return "line"; + case FRAME_SHADED: + return "shaded"; + case FRAME_FADED: + default: + return "faded"; + } +} + static const char *toStr(EEffect e) { switch(e) @@ -1050,14 +2775,6 @@ static const char *toStr(EEffect e) inline const char * toStr(bool b) { return b ? "true" : "false"; } -static QString toStr(const QColor &col) -{ - QString colorStr; - - colorStr.sprintf("#%02X%02X%02X", col.red(), col.green(), col.blue()); - return colorStr; -} - static const char *toStr(EShading s) { switch(s) @@ -1069,6 +2786,8 @@ static const char *toStr(EShading s) return "hsl"; case SHADING_HSV: return "hsv"; + case SHADING_HCY: + return "hcy"; } } @@ -1083,6 +2802,8 @@ static const char *toStr(EStripe s) return "none"; case STRIPE_DIAGONAL: return "diagonal"; + case STRIPE_FADE: + return "fade"; } } @@ -1094,13 +2815,176 @@ static const char *toStr(ESliderStyle s) return "plain"; case SLIDER_TRIANGULAR: return "triangular"; + case SLIDER_ROUND_ROTATED: + return "r-round"; + case SLIDER_PLAIN_ROTATED: + return "r-plain"; + case SLIDER_CIRCULAR: + return "circular"; default: case SLIDER_ROUND: return "round"; } } +static const char *toStr(EColor s) +{ + switch(s) + { + case ECOLOR_BACKGROUND: + return "background"; + case ECOLOR_DARK: + return "dark"; + default: + case ECOLOR_BASE: + return "base"; + } +} + +static const char *toStr(EFocus f) +{ + switch(f) + { + default: + case FOCUS_STANDARD: + return "standard"; + case FOCUS_RECTANGLE: + return "rect"; + case FOCUS_FILLED: + return "filled"; + case FOCUS_FULL: + return "full"; + case FOCUS_LINE: + return "line"; + case FOCUS_GLOW: + return "glow"; + } +} + +static const char *toStr(ETabMo f) +{ + switch(f) + { + default: + case TAB_MO_BOTTOM: + return "bot"; + case TAB_MO_TOP: + return "top"; + case TAB_MO_GLOW: + return "glow"; + } +} + +static const char *toStr(EGradientBorder g) +{ + switch(g) + { + case GB_NONE: + return "none"; + case GB_LIGHT: + return "light"; + case GB_3D_FULL: + return "3dfull"; + case GB_SHINE: + return "shine"; + default: + case GB_3D: + return "3d"; + } +} + +static const char *toStr(EAlign ind) +{ + switch(ind) + { + default: + case ALIGN_LEFT: + return "left"; + case ALIGN_CENTER: + return "center"; + case ALIGN_FULL_CENTER: + return "center-full"; + case ALIGN_RIGHT: + return "right"; + } +} + +static const char * toStr(ETitleBarIcon icn) +{ + switch(icn) + { + case TITLEBAR_ICON_NONE: + return "none"; + default: + case TITLEBAR_ICON_MENU_BUTTON: + return "menu"; + case TITLEBAR_ICON_NEXT_TO_TITLE: + return "title"; + } +} + +static const char * toStr(EGradType gt) +{ + switch(gt) + { + case GT_VERT: + return "vert"; + default: + case GT_HORIZ: + return "horiz"; + } +} + +static const char * toStr(ELvLines lv) +{ + switch(lv) + { + case LV_NEW: + return "new"; + case LV_OLD: + return "old"; + default: + case LV_NONE: + return "none"; + } +} + +static const char * toStr(EImageType lv) +{ + switch(lv) + { + default: + case IMG_NONE: + return "none"; + case IMG_PLAIN_RINGS: + return "plainrings"; + case IMG_BORDERED_RINGS: + return "rings"; + case IMG_SQUARE_RINGS: + return "squarerings"; + case IMG_FILE: + return "file"; + } +} + +static const char * toStr(EGlow lv) +{ + switch(lv) + { + default: + case GLOW_NONE: + return "none"; + case GLOW_START: + return "start"; + case GLOW_MIDDLE: + return "middle"; + case GLOW_END: + return "end"; + } +} + #if QT_VERSION >= 0x040000 +#include #define CFG config #else #define CFG (*cfg) @@ -1112,124 +2996,362 @@ static const char *toStr(ESliderStyle s) else \ CFG.writeEntry(#ENTRY, toStr(opts.ENTRY)); -#define CFG_WRITE_ENTRY_FORCE(ENTRY) \ - CFG.writeEntry(#ENTRY, toStr(opts.ENTRY)); - +#define CFG_WRITE_APPEARANCE_ENTRY(ENTRY, ALLOW) \ + if (!exportingStyle && def.ENTRY==opts.ENTRY) \ + CFG.deleteEntry(#ENTRY); \ + else \ + CFG.writeEntry(#ENTRY, toStr(opts.ENTRY, ALLOW)); + #define CFG_WRITE_ENTRY_B(ENTRY, B) \ if (!exportingStyle && def.ENTRY==opts.ENTRY) \ CFG.deleteEntry(#ENTRY); \ else \ CFG.writeEntry(#ENTRY, toStr(opts.ENTRY, B)); -#define CFG_WRITE_ENTRY_SHADE(ENTRY, DARK, CONVERT_SHADE) \ +#define CFG_WRITE_ENTRY_NUM(ENTRY) \ if (!exportingStyle && def.ENTRY==opts.ENTRY) \ CFG.deleteEntry(#ENTRY); \ else \ - CFG.writeEntry(#ENTRY, toStr(opts.ENTRY, DARK, CONVERT_SHADE)); + CFG.writeEntry(#ENTRY, opts.ENTRY); -#define CFG_WRITE_ENTRY_D(ENTRY) \ +#define CFG_WRITE_SHADE_ENTRY(ENTRY, COL) \ if (!exportingStyle && def.ENTRY==opts.ENTRY) \ CFG.deleteEntry(#ENTRY); \ else \ - CFG.writeEntry(#ENTRY, ((int)(opts.ENTRY*100))-100); + CFG.writeEntry(#ENTRY, toStr(opts.ENTRY, opts.COL)); -#define CFG_WRITE_ENTRY_NUM(ENTRY) \ +#define CFG_WRITE_IMAGE_ENTRY(ENTRY) \ + if (!exportingStyle && def.ENTRY.type==opts.ENTRY.type) \ + CFG.deleteEntry(#ENTRY); \ + else \ + CFG.writeEntry(#ENTRY, toStr(opts.ENTRY.type)); \ + if(IMG_FILE!=opts.ENTRY.type) \ + { \ + CFG.deleteEntry(#ENTRY ".file"); \ + CFG.deleteEntry(#ENTRY ".width"); \ + CFG.deleteEntry(#ENTRY ".height"); \ + } \ + else \ + { \ + CFG.writeEntry(#ENTRY ".file", opts.ENTRY.file); \ + CFG.writeEntry(#ENTRY ".width", opts.ENTRY.width); \ + CFG.writeEntry(#ENTRY ".height", opts.ENTRY.height); \ + } + +#define CFG_WRITE_STRING_LIST_ENTRY(ENTRY) \ if (!exportingStyle && def.ENTRY==opts.ENTRY) \ CFG.deleteEntry(#ENTRY); \ else \ - CFG.writeEntry(#ENTRY, opts.ENTRY); + CFG.writeEntry(#ENTRY, QStringList(opts.ENTRY.toList()).join(",")); \ bool static writeConfig(KConfig *cfg, const Options &opts, const Options &def, bool exportingStyle=false) { if(!cfg) { - const char *xdg=xdgConfigFolder(); + const char *cfgDir=qtcConfDir(); - if(xdg) + if(cfgDir) { - char filename[QTC_MAX_FILENAME_LEN]; - - sprintf(filename, "%s/"QTC_FILE, xdg); - #if QT_VERSION >= 0x040000 - KConfig defCfg(filename, KConfig::SimpleConfig); + KConfig defCfg(QFile::decodeName(cfgDir)+CONFIG_FILE, KConfig::SimpleConfig); #else - KConfig defCfg(filename, false, false); + KConfig defCfg(QFile::decodeName(cfgDir)+CONFIG_FILE, false, false); #endif - return writeConfig(&defCfg, opts, def, exportingStyle); + if(writeConfig(&defCfg, opts, def, exportingStyle)) + { + const char *oldFiles[]={ OLD_CONFIG_FILE, "qtcurve.gtk-icons", 0}; + + for(int i=0; oldFiles[i]; ++i) + { + QString oldFileName(QFile::decodeName(cfgDir)+QString("../")+oldFiles[i]); + + if(QFile::exists(oldFileName)) + QFile::remove(oldFileName); + } + } } } else { #if QT_VERSION >= 0x040000 - KConfigGroup config(cfg, QTC_GROUP); + KConfigGroup config(cfg, SETTINGS_GROUP); #else - cfg->setGroup(QTC_GROUP); + cfg->setGroup(SETTINGS_GROUP); #endif + CFG.writeEntry(VERSION_KEY, VERSION); CFG_WRITE_ENTRY_NUM(passwordChar) + CFG_WRITE_ENTRY_NUM(gbFactor) CFG_WRITE_ENTRY(round) - CFG_WRITE_ENTRY_D(highlightFactor) + CFG_WRITE_ENTRY_NUM(highlightFactor) + CFG_WRITE_ENTRY_NUM(menuDelay) + CFG_WRITE_ENTRY_NUM(sliderWidth) CFG_WRITE_ENTRY(toolbarBorders) - CFG_WRITE_ENTRY_FORCE(appearance) + CFG_WRITE_APPEARANCE_ENTRY(appearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(bgndAppearance, APP_ALLOW_STRIPED) + CFG_WRITE_ENTRY(bgndGrad) + CFG_WRITE_ENTRY(menuBgndGrad) + CFG_WRITE_APPEARANCE_ENTRY(menuBgndAppearance, APP_ALLOW_STRIPED) +#ifdef QTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT CFG_WRITE_ENTRY(fixParentlessDialogs) +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + CFG_WRITE_STRING_LIST_ENTRY(noDlgFixApps) +#endif +#endif CFG_WRITE_ENTRY(stripedProgress) CFG_WRITE_ENTRY(sliderStyle) CFG_WRITE_ENTRY(animatedProgress) - CFG_WRITE_ENTRY(lighterPopupMenuBgnd) + CFG_WRITE_ENTRY_NUM(lighterPopupMenuBgnd) + CFG_WRITE_ENTRY_NUM(tabBgnd) CFG_WRITE_ENTRY(embolden) CFG_WRITE_ENTRY(defBtnIndicator) - CFG_WRITE_ENTRY_B(sliderThumbs, true) - CFG_WRITE_ENTRY_B(handles, false) + CFG_WRITE_ENTRY_B(sliderThumbs, false) + CFG_WRITE_ENTRY_B(handles, true) CFG_WRITE_ENTRY(highlightTab) - CFG_WRITE_ENTRY(colorSelTab) - CFG_WRITE_ENTRY_SHADE(shadeSliders, false, false) - CFG_WRITE_ENTRY_SHADE(shadeMenubars, true, false) - CFG_WRITE_ENTRY_SHADE(shadeCheckRadio, false, true) - CFG_WRITE_ENTRY_FORCE(menubarAppearance) - CFG_WRITE_ENTRY_FORCE(menuitemAppearance) - CFG_WRITE_ENTRY_FORCE(toolbarAppearance) - CFG_WRITE_ENTRY_B(toolbarSeparators, true) - CFG_WRITE_ENTRY_B(splitters, false) + CFG_WRITE_ENTRY_NUM(colorSelTab) + CFG_WRITE_ENTRY(roundAllTabs) + CFG_WRITE_ENTRY(tabMouseOver) + CFG_WRITE_APPEARANCE_ENTRY(menubarAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(menuitemAppearance, APP_ALLOW_FADE) + CFG_WRITE_APPEARANCE_ENTRY(toolbarAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(selectionAppearance, APP_ALLOW_BASIC) +#ifdef __cplusplus + CFG_WRITE_APPEARANCE_ENTRY(dwtAppearance, APP_ALLOW_BASIC) + CFG_WRITE_ENTRY(titlebarEffect) +#endif + CFG_WRITE_APPEARANCE_ENTRY(menuStripeAppearance, APP_ALLOW_BASIC) + CFG_WRITE_ENTRY_B(toolbarSeparators, false) + CFG_WRITE_ENTRY_B(splitters, true) CFG_WRITE_ENTRY(customMenuTextColor) CFG_WRITE_ENTRY(coloredMouseOver) CFG_WRITE_ENTRY(menubarMouseOver) + CFG_WRITE_ENTRY(useHighlightForMenu) CFG_WRITE_ENTRY(shadeMenubarOnlyWhenActive) CFG_WRITE_ENTRY(thinnerMenuItems) - CFG_WRITE_ENTRY(customSlidersColor) - CFG_WRITE_ENTRY(customMenubarsColor) + CFG_WRITE_ENTRY(thinnerBtns) + CFG_WRITE_SHADE_ENTRY(shadeSliders, customSlidersColor) + CFG_WRITE_SHADE_ENTRY(shadeMenubars, customMenubarsColor) + CFG_WRITE_SHADE_ENTRY(sortedLv, customSortedLvColor) CFG_WRITE_ENTRY(customMenuSelTextColor) CFG_WRITE_ENTRY(customMenuNormTextColor) - CFG_WRITE_ENTRY(customCheckRadioColor) + CFG_WRITE_SHADE_ENTRY(shadeCheckRadio, customCheckRadioColor) CFG_WRITE_ENTRY(scrollbarType) CFG_WRITE_ENTRY(buttonEffect) - CFG_WRITE_ENTRY_FORCE(lvAppearance) - CFG_WRITE_ENTRY_FORCE(tabAppearance) - CFG_WRITE_ENTRY_FORCE(sliderAppearance) - CFG_WRITE_ENTRY_FORCE(progressAppearance) -#ifndef QTC_PLAIN_FOCUS_ONLY - CFG_WRITE_ENTRY(stdFocus) -#endif + CFG_WRITE_APPEARANCE_ENTRY(lvAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(tabAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(activeTabAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(sliderAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(progressAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(progressGrooveAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(grooveAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(sunkenAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(sbarBgndAppearance, APP_ALLOW_BASIC) + CFG_WRITE_APPEARANCE_ENTRY(tooltipAppearance, APP_ALLOW_BASIC) + CFG_WRITE_ENTRY(sliderFill) + CFG_WRITE_ENTRY(progressGrooveColor) + CFG_WRITE_ENTRY(focus) + CFG_WRITE_ENTRY(lvButton) CFG_WRITE_ENTRY(lvLines) CFG_WRITE_ENTRY(drawStatusBarFrames) CFG_WRITE_ENTRY(fillSlider) CFG_WRITE_ENTRY(roundMbTopOnly) CFG_WRITE_ENTRY(borderMenuitems) - CFG_WRITE_ENTRY(gradientPbGroove) CFG_WRITE_ENTRY(darkerBorders) CFG_WRITE_ENTRY(vArrows) CFG_WRITE_ENTRY(xCheck) - CFG_WRITE_ENTRY(framelessGroupBoxes) - CFG_WRITE_ENTRY(inactiveHighlight) -#ifdef __cplusplus - CFG_WRITE_ENTRY(stdSidebarButtons) + CFG_WRITE_ENTRY(groupBox) + CFG_WRITE_ENTRY_NUM(gbLabel) + CFG_WRITE_ENTRY(fadeLines) + CFG_WRITE_ENTRY(glowProgress) + CFG_WRITE_IMAGE_ENTRY(bgndImage) + CFG_WRITE_IMAGE_ENTRY(menuBgndImage) + CFG_WRITE_ENTRY(colorMenubarMouseOver) + CFG_WRITE_ENTRY_NUM(crHighlight) + CFG_WRITE_ENTRY(crButton) + CFG_WRITE_SHADE_ENTRY(crColor, customCrBgndColor) + CFG_WRITE_SHADE_ENTRY(progressColor, customProgressColor) + CFG_WRITE_ENTRY(smallRadio) + CFG_WRITE_ENTRY(fillProgress) + CFG_WRITE_ENTRY(comboSplitter) + CFG_WRITE_ENTRY(highlightScrollViews) + CFG_WRITE_ENTRY(etchEntry) + CFG_WRITE_ENTRY_NUM(splitterHighlight) + CFG_WRITE_ENTRY_NUM(expanderHighlight) + CFG_WRITE_ENTRY_NUM(crSize) + CFG_WRITE_ENTRY(flatSbarButtons) + CFG_WRITE_ENTRY(borderSbarGroove) + CFG_WRITE_ENTRY(borderProgress) + CFG_WRITE_ENTRY(popupBorder) + CFG_WRITE_ENTRY(unifySpinBtns) + CFG_WRITE_ENTRY(unifySpin) + CFG_WRITE_ENTRY(unifyCombo) + CFG_WRITE_ENTRY(borderTab) + CFG_WRITE_ENTRY(borderInactiveTab) + CFG_WRITE_ENTRY(thinSbarGroove) + CFG_WRITE_ENTRY(colorSliderMouseOver) + CFG_WRITE_ENTRY(menuIcons) + CFG_WRITE_ENTRY(forceAlternateLvCols) + CFG_WRITE_ENTRY_NUM(square) + CFG_WRITE_ENTRY(invertBotTab) + CFG_WRITE_ENTRY_NUM(menubarHiding) + CFG_WRITE_ENTRY_NUM(statusbarHiding) + CFG_WRITE_ENTRY(boldProgress) + CFG_WRITE_ENTRY(coloredTbarMo) + CFG_WRITE_ENTRY(borderSelection) + CFG_WRITE_ENTRY(stripedSbar) + CFG_WRITE_ENTRY_NUM(windowDrag) + CFG_WRITE_ENTRY(shadePopupMenu) + CFG_WRITE_ENTRY_NUM(windowBorder) +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + CFG_WRITE_ENTRY(xbar) + CFG_WRITE_ENTRY_NUM(dwtSettings) #endif - + CFG_WRITE_ENTRY_NUM(bgndOpacity) + CFG_WRITE_ENTRY_NUM(menuBgndOpacity) + CFG_WRITE_ENTRY_NUM(dlgOpacity) +#if defined CONFIG_DIALOG || (defined QT_VERSION && (QT_VERSION >= 0x040000)) + CFG_WRITE_ENTRY(stdBtnSizes) + CFG_WRITE_ENTRY_NUM(titlebarButtons) + CFG_WRITE_ENTRY(titlebarIcon) + + if((opts.titlebarButtons&TITLEBAR_BUTTON_COLOR || opts.titlebarButtons&TITLEBAR_BUTTON_ICON_COLOR) && + opts.titlebarButtonColors.size() && 0==(opts.titlebarButtonColors.size()%NUM_TITLEBAR_BUTTONS)) + { + QString val; +#if QT_VERSION >= 0x040000 + QTextStream str(&val); +#else + QTextStream str(&val, IO_WriteOnly); +#endif + for(unsigned int i=0; i= 0x040000)) + CFG_WRITE_ENTRY(reorderGtkButtons) +#endif CFG_WRITE_ENTRY(mapKdeIcons) CFG_WRITE_ENTRY(shading) + CFG_WRITE_ENTRY(titlebarAlignment) + CFG_WRITE_ENTRY(centerTabText) +#if defined QT_VERSION && (QT_VERSION >= 0x040000) + CFG_WRITE_STRING_LIST_ENTRY(noBgndGradientApps) + CFG_WRITE_STRING_LIST_ENTRY(noBgndOpacityApps) + CFG_WRITE_STRING_LIST_ENTRY(noMenuBgndOpacityApps) + CFG_WRITE_STRING_LIST_ENTRY(noBgndImageApps) + CFG_WRITE_STRING_LIST_ENTRY(noMenuStripeApps) + CFG_WRITE_STRING_LIST_ENTRY(menubarApps) + CFG_WRITE_STRING_LIST_ENTRY(statusbarApps) + CFG_WRITE_STRING_LIST_ENTRY(useQtFileDialogApps) +#endif + + for(int i=APPEARANCE_CUSTOM1; i<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD); ++i) + { + GradientCont::const_iterator cg(opts.customGradient.find((EAppearance)i)); + QString gradKey; + + gradKey.sprintf("customgradient%d", (i-APPEARANCE_CUSTOM1)+1); + + if(cg==opts.customGradient.end()) + CFG.deleteEntry(gradKey); + else + { + GradientCont::const_iterator d; + + if(exportingStyle || (d=def.customGradient.find((EAppearance)i))==def.customGradient.end() || !((*d)==(*cg))) + { + QString gradVal; +#if QT_VERSION >= 0x040000 + QTextStream str(&gradVal); +#else + QTextStream str(&gradVal, IO_WriteOnly); +#endif + GradientStopCont stops((*cg).second.stops.fix()); + GradientStopCont::const_iterator it(stops.begin()), + end(stops.end()); + bool haveAlpha(false); + + for(; it!=end && !haveAlpha; ++it) + if((*it).alpha<1.0) + haveAlpha=true; + + str << toStr((*cg).second.border); + if(haveAlpha) + str << "-alpha"; + + for(it=stops.begin(); it!=end; ++it) + if(haveAlpha) + str << ',' << (*it).pos << ',' << (*it).val << ',' << (*it).alpha; + else + str << ',' << (*it).pos << ',' << (*it).val; + CFG.writeEntry(gradKey, gradVal); + } + else + CFG.deleteEntry(gradKey); + } + } + + if(opts.customShades[0]==0 || + exportingStyle || + opts.customShades[0]!=def.customShades[0] || + opts.customShades[1]!=def.customShades[1] || + opts.customShades[2]!=def.customShades[2] || + opts.customShades[3]!=def.customShades[3] || + opts.customShades[4]!=def.customShades[4] || + opts.customShades[5]!=def.customShades[5]) + { + QString shadeVal; +#if QT_VERSION >= 0x040000 + QTextStream str(&shadeVal); +#else + QTextStream str(&shadeVal, IO_WriteOnly); +#endif + if(0==opts.customShades[0]) + str << 0; + else + for(int i=0; isync(); return true; } -- cgit v1.2.3