Expose QPixmapCache's cache limit size as an user preference

This commit is contained in:
Fabio Bas 2014-12-24 16:16:34 +01:00
parent 776d809f2f
commit b96104bed4
6 changed files with 42 additions and 5 deletions

View file

@ -50,16 +50,27 @@ GeneralSettingsPage::GeneralSettingsPage()
picDownloadHqCheckBox = new QCheckBox;
picDownloadHqCheckBox->setChecked(settingsCache->getPicDownloadHq());
pixmapCacheLabel = new QLabel;
pixmapCacheEdit = new QSpinBox;
pixmapCacheEdit->setMinimum(64);
pixmapCacheEdit->setMaximum(8192);
pixmapCacheEdit->setSingleStep(64);
pixmapCacheEdit->setValue(settingsCache->getPixmapCacheSize());
pixmapCacheEdit->setSuffix(" MB");
connect(languageBox, SIGNAL(currentIndexChanged(int)), this, SLOT(languageBoxChanged(int)));
connect(picDownloadCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setPicDownload(int)));
connect(picDownloadHqCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setPicDownloadHq(int)));
connect(pixmapCacheEdit, SIGNAL(valueChanged(int)), settingsCache, SLOT(setPixmapCacheSize(int)));
QGridLayout *personalGrid = new QGridLayout;
personalGrid->addWidget(languageLabel, 0, 0);
personalGrid->addWidget(languageBox, 0, 1);
personalGrid->addWidget(picDownloadCheckBox, 1, 0, 1, 2);
personalGrid->addWidget(picDownloadHqCheckBox, 2, 0, 1, 2);
personalGrid->addWidget(clearDownloadedPicsButton, 3, 0, 1, 1);
personalGrid->addWidget(pixmapCacheLabel, 1, 0, 1, 1);
personalGrid->addWidget(pixmapCacheEdit, 1, 1, 1, 1);
personalGrid->addWidget(picDownloadCheckBox, 2, 0, 1, 2);
personalGrid->addWidget(picDownloadHqCheckBox, 3, 0, 1, 2);
personalGrid->addWidget(clearDownloadedPicsButton, 4, 0, 1, 1);
personalGroupBox = new QGroupBox;
personalGroupBox->setLayout(personalGrid);
@ -227,6 +238,7 @@ void GeneralSettingsPage::retranslateUi()
picsPathLabel->setText(tr("Pictures directory:"));
cardDatabasePathLabel->setText(tr("Card database:"));
tokenDatabasePathLabel->setText(tr("Token database:"));
pixmapCacheLabel->setText(tr("Picture cache size:"));
}
AppearanceSettingsPage::AppearanceSettingsPage()

View file

@ -16,6 +16,7 @@ class QLabel;
class QCloseEvent;
class QSpinBox;
class QRadioButton;
class QSpinBox;
class AbstractSettingsPage : public QWidget {
public:
@ -39,11 +40,12 @@ private:
QStringList findQmFiles();
QString languageName(const QString &qmFile);
QLineEdit *deckPathEdit, *replaysPathEdit, *picsPathEdit, *cardDatabasePathEdit, *tokenDatabasePathEdit;
QSpinBox *pixmapCacheEdit;
QGroupBox *personalGroupBox, *pathsGroupBox;
QComboBox *languageBox;
QCheckBox *picDownloadCheckBox;
QCheckBox *picDownloadHqCheckBox;
QLabel *languageLabel, *deckPathLabel, *replaysPathLabel, *picsPathLabel, *cardDatabasePathLabel, *tokenDatabasePathLabel;
QLabel *languageLabel, *deckPathLabel, *replaysPathLabel, *picsPathLabel, *cardDatabasePathLabel, *tokenDatabasePathLabel, *pixmapCacheLabel;
};
class AppearanceSettingsPage : public AbstractSettingsPage {

View file

@ -23,6 +23,7 @@ SettingsCache::SettingsCache()
picDownload = settings->value("personal/picturedownload", true).toBool();
picDownloadHq = settings->value("personal/picturedownloadhq", false).toBool();
pixmapCacheSize = settings->value("personal/pixmapCacheSize", PIXMAPCACHE_SIZE_DEFAULT).toInt();
picUrl = settings->value("personal/picUrl", PIC_URL_DEFAULT).toString();
picUrlHq = settings->value("personal/picUrlHq", PIC_URL_HQ_DEFAULT).toString();
picUrlFallback = settings->value("personal/picUrlFallback", PIC_URL_FALLBACK).toString();
@ -289,6 +290,13 @@ void SettingsCache::setAutoConnect(const bool &_autoConnect)
settings->setValue("server/auto_connect", attemptAutoConnect ? 1 : 0);
}
void SettingsCache::setPixmapCacheSize(const int _pixmapCacheSize)
{
pixmapCacheSize = _pixmapCacheSize;
settings->setValue("personal/pixmapCacheSize", pixmapCacheSize);
emit pixmapCacheSizeChanged(pixmapCacheSize);
}
void SettingsCache::copyPath(const QString &src, const QString &dst)
{
// test source && return if inexistent

View file

@ -7,6 +7,8 @@
#define PIC_URL_FALLBACK "http://mtgimage.com/set/!setcode!/!name!.jpg"
#define PIC_URL_HQ_DEFAULT "http://mtgimage.com/multiverseid/!cardid!.jpg"
#define PIC_URL_HQ_FALLBACK "http://mtgimage.com/set/!setcode!/!name!.jpg"
// size should be a multiple of 64
#define PIXMAPCACHE_SIZE_DEFAULT 256
class QSettings;
@ -32,6 +34,7 @@ signals:
void soundPathChanged();
void priceTagFeatureChanged(int enabled);
void ignoreUnregisteredUsersChanged();
void pixmapCacheSizeChanged(int value);
private:
QSettings *settings;
@ -62,6 +65,7 @@ private:
QString picUrlFallback;
QString picUrlHqFallback;
bool attemptAutoConnect;
int pixmapCacheSize;
public:
SettingsCache();
const QByteArray &getMainWindowGeometry() const { return mainWindowGeometry; }
@ -101,6 +105,7 @@ public:
QString getPicUrlHqFallback() const { return picUrlHqFallback; }
void copyPath(const QString &src, const QString &dst);
bool getAutoConnect() const { return attemptAutoConnect; }
int getPixmapCacheSize() const { return pixmapCacheSize; }
public slots:
void setMainWindowGeometry(const QByteArray &_mainWindowGeometry);
void setLang(const QString &_lang);
@ -138,6 +143,7 @@ public slots:
void setPicUrlFallback(const QString &_picUrlFallback);
void setPicUrlHqFallback(const QString &_picUrlHqFallback);
void setAutoConnect(const bool &_autoConnect);
void setPixmapCacheSize(const int _pixmapCacheSize);
};
extern SettingsCache *settingsCache;

View file

@ -361,7 +361,8 @@ void MainWindow::createMenus()
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), localServer(0), bHasActivated(false)
{
QPixmapCache::setCacheLimit(200000);
connect(settingsCache, SIGNAL(pixmapCacheSizeChanged(int)), this, SLOT(pixmapCacheSizeChanged(int)));
pixmapCacheSizeChanged(settingsCache->getPixmapCacheSize());
client = new RemoteClient;
connect(client, SIGNAL(connectionClosedEventReceived(const Event_ConnectionClosed &)), this, SLOT(processConnectionClosedEvent(const Event_ConnectionClosed &)));
@ -430,3 +431,10 @@ void MainWindow::changeEvent(QEvent *event)
QMainWindow::changeEvent(event);
}
void MainWindow::pixmapCacheSizeChanged(int value)
{
//qDebug() << "Setting pixmap cache size to " << value << " MBs";
// translate MBs to KBs
QPixmapCache::setCacheLimit(value * 1024);
}

View file

@ -44,6 +44,7 @@ private slots:
void protocolVersionMismatch(int localVersion, int remoteVersion);
void userInfoReceived(const ServerInfo_User &userInfo);
void localGameEnded();
void pixmapCacheSizeChanged(int value);
void actConnect();
void actDisconnect();