diff --git a/cockatrice/src/dlg_settings.cpp b/cockatrice/src/dlg_settings.cpp index 06e35b06..f8efb244 100644 --- a/cockatrice/src/dlg_settings.cpp +++ b/cockatrice/src/dlg_settings.cpp @@ -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() diff --git a/cockatrice/src/dlg_settings.h b/cockatrice/src/dlg_settings.h index de46f1b1..c20b61a3 100644 --- a/cockatrice/src/dlg_settings.h +++ b/cockatrice/src/dlg_settings.h @@ -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 { diff --git a/cockatrice/src/settingscache.cpp b/cockatrice/src/settingscache.cpp index 8374bdb5..424b64b4 100644 --- a/cockatrice/src/settingscache.cpp +++ b/cockatrice/src/settingscache.cpp @@ -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 diff --git a/cockatrice/src/settingscache.h b/cockatrice/src/settingscache.h index 3b1908a9..3c79a5c5 100644 --- a/cockatrice/src/settingscache.h +++ b/cockatrice/src/settingscache.h @@ -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; diff --git a/cockatrice/src/window_main.cpp b/cockatrice/src/window_main.cpp index 51a09418..b9ac9f71 100644 --- a/cockatrice/src/window_main.cpp +++ b/cockatrice/src/window_main.cpp @@ -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); +} diff --git a/cockatrice/src/window_main.h b/cockatrice/src/window_main.h index e804bbe6..d6c9f5a7 100644 --- a/cockatrice/src/window_main.h +++ b/cockatrice/src/window_main.h @@ -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();