From 2c9a8c2b57fdaac10018f6ff0bf3f5f21d127adb Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Sat, 6 Mar 2010 22:10:50 +0100 Subject: [PATCH] minor cleanups and optimizations --- cockatrice/cockatrice.pro | 2 + cockatrice/src/carddatabase.cpp | 50 +++----- cockatrice/src/carddatabase.h | 12 +- cockatrice/src/carditem.cpp | 31 +++-- cockatrice/src/carditem.h | 2 + cockatrice/src/dlg_settings.cpp | 122 +++++++++----------- cockatrice/src/dlg_settings.h | 17 ++- cockatrice/src/main.cpp | 8 +- cockatrice/src/pingpixmapgenerator.cpp | 8 ++ cockatrice/src/pingpixmapgenerator.h | 3 + cockatrice/src/settingscache.cpp | 63 +++++++++++ cockatrice/src/settingscache.h | 44 ++++++++ cockatrice/src/tab_game.cpp | 1 + cockatrice/translations/cockatrice_de.ts | 138 +++++++++++++---------- cockatrice/translations/cockatrice_en.ts | 138 +++++++++++++---------- 15 files changed, 391 insertions(+), 248 deletions(-) create mode 100644 cockatrice/src/settingscache.cpp create mode 100644 cockatrice/src/settingscache.h diff --git a/cockatrice/cockatrice.pro b/cockatrice/cockatrice.pro index f7135661..a1e5d183 100644 --- a/cockatrice/cockatrice.pro +++ b/cockatrice/cockatrice.pro @@ -53,6 +53,7 @@ HEADERS += src/counter.h \ src/deckview.h \ src/playerlistwidget.h \ src/pingpixmapgenerator.h \ + src/settingscache.h \ ../common/serializable_item.h \ ../common/decklist.h \ ../common/protocol.h \ @@ -105,6 +106,7 @@ SOURCES += src/counter.cpp \ src/deckview.cpp \ src/playerlistwidget.cpp \ src/pingpixmapgenerator.cpp \ + src/settingscache.cpp \ ../common/serializable_item.cpp \ ../common/decklist.cpp \ ../common/protocol.cpp \ diff --git a/cockatrice/src/carddatabase.cpp b/cockatrice/src/carddatabase.cpp index 10753d3a..0f0d5dd2 100644 --- a/cockatrice/src/carddatabase.cpp +++ b/cockatrice/src/carddatabase.cpp @@ -1,4 +1,5 @@ #include "carddatabase.h" +#include "settingscache.h" #include #include #include @@ -115,7 +116,7 @@ QPixmap *CardInfo::loadPixmap() if (pixmap) return pixmap; pixmap = new QPixmap(); - QString picsPath = db->getPicsPath(); + QString picsPath = settingsCache->getPicsPath(); if (!QDir(picsPath).exists()) return pixmap; @@ -139,7 +140,7 @@ QPixmap *CardInfo::loadPixmap() } if (pixmap->load(QString("%1/%2/%3.full.jpg").arg(picsPath).arg("downloadedPics").arg(correctedName))) return pixmap; - if (db->getPicDownload()) + if (settingsCache->getPicDownload()) db->startPicDownload(this); return pixmap; } @@ -230,12 +231,14 @@ QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardInfo *info) CardDatabase::CardDatabase(QObject *parent) : QObject(parent), noCard(0) { + connect(settingsCache, SIGNAL(picsPathChanged()), this, SLOT(clearPixmapCache())); + connect(settingsCache, SIGNAL(cardDatabasePathChanged()), this, SLOT(loadCardDatabase())); + connect(settingsCache, SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged())); + http = new QHttp(this); connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(picDownloadFinished(int, bool))); - updateDatabasePath(); - updatePicDownload(); - updatePicsPath(); + loadCardDatabase(); noCard = new CardInfo(this); noCard->loadPixmap(); // cache pixmap for card back @@ -334,6 +337,7 @@ void CardDatabase::picDownloadFinished(int id, bool error) buffer->close(); if (!error) { + QString picsPath = settingsCache->getPicsPath(); const QByteArray &picData = buffer->data(); QPixmap testPixmap; if (testPixmap.loadFromData(picData)) { @@ -470,42 +474,18 @@ bool CardDatabase::saveToFile(const QString &fileName) return true; } -void CardDatabase::updatePicDownload(int _picDownload) +void CardDatabase::picDownloadChanged() { - if (_picDownload == -1) { - QSettings settings; - picDownload = settings.value("personal/picturedownload", 0).toInt(); - } else - picDownload = _picDownload; - - if (picDownload) { + if (settingsCache->getPicDownload()) { QHashIterator cardIterator(cardHash); - while (cardIterator.hasNext()) { - CardInfo *c = cardIterator.next().value(); - c->clearPixmapCacheMiss(); - } + while (cardIterator.hasNext()) + cardIterator.next().value()->clearPixmapCacheMiss(); } } -void CardDatabase::updatePicsPath(const QString &path) +void CardDatabase::loadCardDatabase() { - if (path.isEmpty()) { - QSettings settings; - settings.beginGroup("paths"); - picsPath = settings.value("pics").toString(); - } else - picsPath = path; - clearPixmapCache(); -} - -void CardDatabase::updateDatabasePath(const QString &path) -{ - if (path.isEmpty()) { - QSettings settings; - settings.beginGroup("paths"); - cardDatabasePath = settings.value("carddatabase").toString(); - } else - cardDatabasePath = path; + QString cardDatabasePath = settingsCache->getCardDatabasePath(); if (!cardDatabasePath.isEmpty()) loadFromFile(cardDatabasePath); } diff --git a/cockatrice/src/carddatabase.h b/cockatrice/src/carddatabase.h index 2e4336e4..04944a06 100644 --- a/cockatrice/src/carddatabase.h +++ b/cockatrice/src/carddatabase.h @@ -95,7 +95,6 @@ protected: QHash setHash; QMap > downloadBuffers; CardInfo *noCard; - QString picsPath, cardDatabasePath; private: void loadCardsFromXml(QXmlStreamReader &xml); void loadSetsFromXml(QXmlStreamReader &xml); @@ -109,20 +108,17 @@ public: CardSet *getSet(const QString &setName); QList getCardList() const { return cardHash.values(); } SetList getSetList() const; - bool getPicDownload() const { return picDownload; } - void clearPixmapCache(); int loadFromFile(const QString &fileName); bool saveToFile(const QString &fileName); - const QString &getPicsPath() const { return picsPath; } void startPicDownload(CardInfo *card); QStringList getAllColors() const; QStringList getAllMainCardTypes() const; +public slots: + void clearPixmapCache(); private slots: void picDownloadFinished(int id, bool error); -public slots: - void updatePicsPath(const QString &path = QString()); - void updateDatabasePath(const QString &path = QString()); - void updatePicDownload(int _picDownload = -1); + void loadCardDatabase(); + void picDownloadChanged(); }; #endif diff --git a/cockatrice/src/carditem.cpp b/cockatrice/src/carditem.cpp index 6b9778ba..566f103d 100644 --- a/cockatrice/src/carditem.cpp +++ b/cockatrice/src/carditem.cpp @@ -9,6 +9,7 @@ #include "arrowitem.h" #include "main.h" #include "protocol_datastructures.h" +#include "settingscache.h" CardItem::CardItem(Player *_owner, const QString &_name, int _cardid, QGraphicsItem *parent) : AbstractCardItem(_name, parent), owner(_owner), id(_cardid), attacking(false), facedown(false), counters(0), doesntUntap(false), beingPointedAt(false), dragItem(NULL) @@ -153,18 +154,9 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) setCursor(Qt::OpenHandCursor); } -void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +void CardItem::playCard(QGraphicsSceneMouseEvent *event) { - if (event->button() == Qt::RightButton) - qgraphicsitem_cast(parentItem())->getPlayer()->showCardMenu(event->screenPos()); - setCursor(Qt::OpenHandCursor); -} - -void CardItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) -{ - event->accept(); - - CardZone *zone = (CardZone *) parentItem(); + CardZone *zone = static_cast(parentItem()); // Do nothing if the card belongs to another player if (!zone->getPlayer()->getLocal()) return; @@ -181,3 +173,20 @@ void CardItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) table->handleDropEventByGrid(id, zone, gridPoint, faceDown, tapped); } } + +void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + if (event->button() == Qt::RightButton) + qgraphicsitem_cast(parentItem())->getPlayer()->showCardMenu(event->screenPos()); + else if ((event->button() == Qt::LeftButton) && !settingsCache->getDoubleClickToPlay()) + playCard(event); + + setCursor(Qt::OpenHandCursor); +} + +void CardItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) +{ + if (settingsCache->getDoubleClickToPlay()) + playCard(event); + event->accept(); +} diff --git a/cockatrice/src/carditem.h b/cockatrice/src/carditem.h index 49edd28e..a9304fbf 100644 --- a/cockatrice/src/carditem.h +++ b/cockatrice/src/carditem.h @@ -24,6 +24,8 @@ private: QPoint gridPoint; bool beingPointedAt; CardDragItem *dragItem; + + void playCard(QGraphicsSceneMouseEvent *event); public: enum { Type = typeCard }; int type() const { return Type; } diff --git a/cockatrice/src/dlg_settings.cpp b/cockatrice/src/dlg_settings.cpp index 46c948e4..ea5438ea 100644 --- a/cockatrice/src/dlg_settings.cpp +++ b/cockatrice/src/dlg_settings.cpp @@ -3,57 +3,50 @@ #include "carddatabase.h" #include "dlg_settings.h" #include "main.h" +#include "settingscache.h" GeneralSettingsPage::GeneralSettingsPage() { - QSettings settings; - - personalGroupBox = new QGroupBox; - languageLabel = new QLabel; languageBox = new QComboBox; - settings.beginGroup("personal"); - QString setLanguage = settings.value("lang").toString(); + QString setLanguage = settingsCache->getLang(); QStringList qmFiles = findQmFiles(); for (int i = 0; i < qmFiles.size(); i++) { QString langName = languageName(qmFiles[i]); languageBox->addItem(langName, qmFiles[i]); - if ((qmFiles[i] == settings.value("lang").toString()) || (setLanguage.isEmpty() && langName == tr("English"))) + if ((qmFiles[i] == setLanguage) || (setLanguage.isEmpty() && langName == tr("English"))) languageBox->setCurrentIndex(i); } picDownloadCheckBox = new QCheckBox; - picDownloadCheckBox->setChecked(settings.value("picturedownload", 0).toInt()); + picDownloadCheckBox->setChecked(settingsCache->getPicDownload()); - settings.endGroup(); connect(languageBox, SIGNAL(currentIndexChanged(int)), this, SLOT(languageBoxChanged(int))); - connect(picDownloadCheckBox, SIGNAL(stateChanged(int)), this, SLOT(picDownloadCheckBoxChanged(int))); + connect(picDownloadCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setPicDownload(int))); QGridLayout *personalGrid = new QGridLayout; personalGrid->addWidget(languageLabel, 0, 0); personalGrid->addWidget(languageBox, 0, 1); personalGrid->addWidget(picDownloadCheckBox, 1, 0, 1, 2); + personalGroupBox = new QGroupBox; personalGroupBox->setLayout(personalGrid); - pathsGroupBox = new QGroupBox; - settings.beginGroup("paths"); - deckPathLabel = new QLabel; - deckPathEdit = new QLineEdit(settings.value("decks").toString()); + deckPathEdit = new QLineEdit(settingsCache->getDeckPath()); deckPathEdit->setReadOnly(true); QPushButton *deckPathButton = new QPushButton("..."); connect(deckPathButton, SIGNAL(clicked()), this, SLOT(deckPathButtonClicked())); picsPathLabel = new QLabel; - picsPathEdit = new QLineEdit(settings.value("pics").toString()); + picsPathEdit = new QLineEdit(settingsCache->getPicsPath()); picsPathEdit->setReadOnly(true); QPushButton *picsPathButton = new QPushButton("..."); connect(picsPathButton, SIGNAL(clicked()), this, SLOT(picsPathButtonClicked())); cardDatabasePathLabel = new QLabel; - cardDatabasePathEdit = new QLineEdit(settings.value("carddatabase").toString()); + cardDatabasePathEdit = new QLineEdit(settingsCache->getCardDatabasePath()); cardDatabasePathEdit->setReadOnly(true); QPushButton *cardDatabasePathButton = new QPushButton("..."); connect(cardDatabasePathButton, SIGNAL(clicked()), this, SLOT(cardDatabasePathButtonClicked())); @@ -81,8 +74,9 @@ GeneralSettingsPage::GeneralSettingsPage() pathsGrid->addWidget(cardBackgroundPathEdit, 3, 1); pathsGrid->addWidget(cardBackgroundPathButton, 3, 2); */ + pathsGroupBox = new QGroupBox; pathsGroupBox->setLayout(pathsGrid); - + QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(personalGroupBox); mainLayout->addWidget(pathsGroupBox); @@ -115,10 +109,9 @@ void GeneralSettingsPage::deckPathButtonClicked() QString path = QFileDialog::getExistingDirectory(this, tr("Choose path")); if (path.isEmpty()) return; - QSettings settings; - settings.beginGroup("paths"); - settings.setValue("decks", path); + deckPathEdit->setText(path); + settingsCache->setDeckPath(path); } void GeneralSettingsPage::picsPathButtonClicked() @@ -126,12 +119,9 @@ void GeneralSettingsPage::picsPathButtonClicked() QString path = QFileDialog::getExistingDirectory(this, tr("Choose path")); if (path.isEmpty()) return; - QSettings settings; - settings.beginGroup("paths"); - settings.setValue("pics", path); - picsPathEdit->setText(path); - emit picsPathChanged(path); + picsPathEdit->setText(path); + settingsCache->setPicsPath(path); } void GeneralSettingsPage::cardDatabasePathButtonClicked() @@ -139,12 +129,9 @@ void GeneralSettingsPage::cardDatabasePathButtonClicked() QString path = QFileDialog::getOpenFileName(this, tr("Choose path")); if (path.isEmpty()) return; - QSettings settings; - settings.beginGroup("paths"); - settings.setValue("carddatabase", path); - cardDatabasePathEdit->setText(path); - emit cardDatabasePathChanged(path); + cardDatabasePathEdit->setText(path); + settingsCache->setCardDatabasePath(path); } void GeneralSettingsPage::cardBackgroundPathButtonClicked() @@ -163,19 +150,7 @@ void GeneralSettingsPage::cardBackgroundPathButtonClicked() void GeneralSettingsPage::languageBoxChanged(int index) { QString qmFile = languageBox->itemData(index).toString(); - QSettings settings; - settings.beginGroup("personal"); - settings.setValue("lang", qmFile); - emit changeLanguage(qmFile); -} - -void GeneralSettingsPage::picDownloadCheckBoxChanged(int state) -{ - QSettings settings; - settings.beginGroup("personal"); - settings.setValue("picturedownload", state); - - emit picDownloadChanged(state); + settingsCache->setLang(qmFile); } void GeneralSettingsPage::retranslateUi() @@ -230,14 +205,10 @@ AppearanceSettingsPage::AppearanceSettingsPage() zoneBgGroupBox->setLayout(zoneBgGrid); tableGroupBox = new QGroupBox; - settings.beginGroup("table"); - economicGridCheckBox = new QCheckBox; - economicGridCheckBox->setChecked(settings.value("economic", 1).toInt()); - connect(economicGridCheckBox, SIGNAL(stateChanged(int)), this, SLOT(economicGridCheckBoxChanged(int))); + economicGridCheckBox->setChecked(settingsCache->getEconomicGrid()); + connect(economicGridCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setEconomicGrid(int))); - settings.endGroup(); - QGridLayout *tableGrid = new QGridLayout; tableGrid->addWidget(economicGridCheckBox, 0, 0, 1, 2); @@ -319,15 +290,6 @@ void AppearanceSettingsPage::playerAreaBgButtonClicked() emit playerAreaBgChanged(path); } -void AppearanceSettingsPage::economicGridCheckBoxChanged(int state) -{ - QSettings settings; - settings.beginGroup("table"); - settings.setValue("economic", state); - - emit economicGridChanged(state); -} - void AppearanceSettingsPage::zoneViewSortingCheckBoxChanged(int state) { QSettings settings; @@ -337,6 +299,30 @@ void AppearanceSettingsPage::zoneViewSortingCheckBoxChanged(int state) emit zoneViewSortingChanged(state); } +UserInterfaceSettingsPage::UserInterfaceSettingsPage() +{ + doubleClickToPlayCheckBox = new QCheckBox; + doubleClickToPlayCheckBox->setChecked(settingsCache->getDoubleClickToPlay()); + connect(doubleClickToPlayCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setDoubleClickToPlay(int))); + + QGridLayout *generalGrid = new QGridLayout; + generalGrid->addWidget(doubleClickToPlayCheckBox, 0, 0); + + generalGroupBox = new QGroupBox; + generalGroupBox->setLayout(generalGrid); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(generalGroupBox); + + setLayout(mainLayout); +} + +void UserInterfaceSettingsPage::retranslateUi() +{ + generalGroupBox->setTitle(tr("General interface settings")); + doubleClickToPlayCheckBox->setText(tr("&Double-click cards to play them (instead of single-click)")); +} + MessagesSettingsPage::MessagesSettingsPage() { aAdd = new QAction(this); @@ -401,6 +387,8 @@ void MessagesSettingsPage::retranslateUi() DlgSettings::DlgSettings(QWidget *parent) : QDialog(parent) { + connect(settingsCache, SIGNAL(langChanged()), this, SLOT(updateLanguage())); + contentsWidget = new QListWidget; contentsWidget->setViewMode(QListView::IconMode); contentsWidget->setIconSize(QSize(96, 84)); @@ -410,13 +398,9 @@ DlgSettings::DlgSettings(QWidget *parent) contentsWidget->setSpacing(12); pagesWidget = new QStackedWidget; - GeneralSettingsPage *general = new GeneralSettingsPage; - connect(general, SIGNAL(picsPathChanged(const QString &)), db, SLOT(updatePicsPath(const QString &))); - connect(general, SIGNAL(cardDatabasePathChanged(const QString &)), db, SLOT(updateDatabasePath(const QString &))); - connect(general, SIGNAL(changeLanguage(const QString &)), this, SLOT(changeLanguage(const QString &))); - connect(general, SIGNAL(picDownloadChanged(int)), db, SLOT(updatePicDownload(int))); - pagesWidget->addWidget(general); + pagesWidget->addWidget(new GeneralSettingsPage); pagesWidget->addWidget(new AppearanceSettingsPage); + pagesWidget->addWidget(new UserInterfaceSettingsPage); pagesWidget->addWidget(new MessagesSettingsPage); closeButton = new QPushButton; @@ -457,6 +441,11 @@ void DlgSettings::createIcons() appearanceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); appearanceButton->setIcon(QIcon(":/resources/icon_config_appearance.svg")); + userInterfaceButton = new QListWidgetItem(contentsWidget); + userInterfaceButton->setTextAlignment(Qt::AlignHCenter); + userInterfaceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + userInterfaceButton->setIcon(QIcon(":/resources/icon_config_appearance.svg")); + messagesButton = new QListWidgetItem(contentsWidget); messagesButton->setTextAlignment(Qt::AlignHCenter); messagesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); @@ -473,10 +462,10 @@ void DlgSettings::changePage(QListWidgetItem *current, QListWidgetItem *previous pagesWidget->setCurrentIndex(contentsWidget->row(current)); } -void DlgSettings::changeLanguage(const QString &qmFile) +void DlgSettings::updateLanguage() { qApp->removeTranslator(translator); - translator->load(qmFile); + translator->load(settingsCache->getLang()); qApp->installTranslator(translator); } @@ -493,6 +482,7 @@ void DlgSettings::retranslateUi() generalButton->setText(tr("General")); appearanceButton->setText(tr("Appearance")); + userInterfaceButton->setText(tr("User interface")); messagesButton->setText(tr("Messages")); closeButton->setText(tr("&Close")); diff --git a/cockatrice/src/dlg_settings.h b/cockatrice/src/dlg_settings.h index 76acd1eb..0926a808 100644 --- a/cockatrice/src/dlg_settings.h +++ b/cockatrice/src/dlg_settings.h @@ -30,7 +30,6 @@ private slots: void cardDatabasePathButtonClicked(); void cardBackgroundPathButtonClicked(); void languageBoxChanged(int index); - void picDownloadCheckBoxChanged(int state); signals: void picsPathChanged(const QString &path); void cardDatabasePathChanged(const QString &path); @@ -53,13 +52,11 @@ private slots: void handBgButtonClicked(); void tableBgButtonClicked(); void playerAreaBgButtonClicked(); - void economicGridCheckBoxChanged(int state); void zoneViewSortingCheckBoxChanged(int state); signals: void handBgChanged(const QString &path); void tableBgChanged(const QString &path); void playerAreaBgChanged(const QString &path); - void economicGridChanged(int state); void zoneViewSortingChanged(int state); private: QLabel *handBgLabel, *tableBgLabel, *playerAreaBgLabel; @@ -71,6 +68,16 @@ public: void retranslateUi(); }; +class UserInterfaceSettingsPage : public AbstractSettingsPage { + Q_OBJECT +private: + QCheckBox *doubleClickToPlayCheckBox; + QGroupBox *generalGroupBox; +public: + UserInterfaceSettingsPage(); + void retranslateUi(); +}; + class MessagesSettingsPage : public AbstractSettingsPage { Q_OBJECT public: @@ -92,11 +99,11 @@ public: DlgSettings(QWidget *parent = 0); private slots: void changePage(QListWidgetItem *current, QListWidgetItem *previous); - void changeLanguage(const QString &qmFile); + void updateLanguage(); private: QListWidget *contentsWidget; QStackedWidget *pagesWidget; - QListWidgetItem *generalButton, *appearanceButton, *messagesButton; + QListWidgetItem *generalButton, *appearanceButton, *userInterfaceButton, *messagesButton; QPushButton *closeButton; void createIcons(); void retranslateUi(); diff --git a/cockatrice/src/main.cpp b/cockatrice/src/main.cpp index 66d3f450..2aaa26fa 100644 --- a/cockatrice/src/main.cpp +++ b/cockatrice/src/main.cpp @@ -31,11 +31,13 @@ #include "main.h" #include "window_main.h" #include "carddatabase.h" +#include "settingscache.h" //Q_IMPORT_PLUGIN(qjpeg) CardDatabase *db; QTranslator *translator; +SettingsCache *settingsCache; void myMessageOutput(QtMsgType /*type*/, const char *msg) { @@ -57,6 +59,7 @@ int main(int argc, char *argv[]) QCoreApplication::setOrganizationDomain("cockatrice.de"); QCoreApplication::setApplicationName("Cockatrice"); + settingsCache = new SettingsCache; db = new CardDatabase; QString localeName;// = QLocale::system().name(); @@ -65,9 +68,7 @@ int main(int argc, char *argv[]) app.installTranslator(&qtTranslator); translator = new QTranslator; - QSettings settings; - settings.beginGroup("personal"); - QString lang = settings.value("lang").toString(); + QString lang = settingsCache->getLang(); if (lang.isEmpty()) translator->load("cockatrice_" + localeName, ":/translations", QString(), ".qm"); else @@ -88,6 +89,7 @@ int main(int argc, char *argv[]) int retval = app.exec(); delete db; + delete settingsCache; return retval; } diff --git a/cockatrice/src/pingpixmapgenerator.cpp b/cockatrice/src/pingpixmapgenerator.cpp index 0ae76335..47cf74ab 100644 --- a/cockatrice/src/pingpixmapgenerator.cpp +++ b/cockatrice/src/pingpixmapgenerator.cpp @@ -1,8 +1,14 @@ #include "pingpixmapgenerator.h" #include +QMap PingPixmapGenerator::pmCache; + QPixmap PingPixmapGenerator::generatePixmap(int size, int value, int max) { + int key = size * 1000000 + max * 1000 + value; + if (pmCache.contains(key)) + return pmCache.value(key); + QPixmap pixmap(size, size); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); @@ -16,6 +22,8 @@ QPixmap PingPixmapGenerator::generatePixmap(int size, int value, int max) g.setColorAt(0, color); g.setColorAt(1, Qt::transparent); painter.fillRect(0, 0, pixmap.width(), pixmap.height(), QBrush(g)); + + pmCache.insert(key, pixmap); return pixmap; } diff --git a/cockatrice/src/pingpixmapgenerator.h b/cockatrice/src/pingpixmapgenerator.h index af813c22..5cf3781b 100644 --- a/cockatrice/src/pingpixmapgenerator.h +++ b/cockatrice/src/pingpixmapgenerator.h @@ -2,8 +2,11 @@ #define PINGPIXMAPGENERATOR_H #include +#include class PingPixmapGenerator { +private: + static QMap pmCache; public: static QPixmap generatePixmap(int size, int value, int max); }; diff --git a/cockatrice/src/settingscache.cpp b/cockatrice/src/settingscache.cpp new file mode 100644 index 00000000..7ed3e54d --- /dev/null +++ b/cockatrice/src/settingscache.cpp @@ -0,0 +1,63 @@ +#include "settingscache.h" +#include + +SettingsCache::SettingsCache() +{ + settings = new QSettings; + + lang = settings->value("personal/lang").toString(); + + deckPath = settings->value("paths/decks").toString(); + picsPath = settings->value("paths/pics").toString(); + cardDatabasePath = settings->value("paths/carddatabase").toString(); + + picDownload = settings->value("personal/picturedownload", 0).toInt(); + doubleClickToPlay = settings->value("interface/doubleclicktoplay", 1).toInt(); + economicGrid = settings->value("table/economic", 0).toInt(); +} + +void SettingsCache::setLang(const QString &_lang) +{ + lang = _lang; + settings->setValue("personal/lang", lang); + emit langChanged(); +} + +void SettingsCache::setDeckPath(const QString &_deckPath) +{ + deckPath = _deckPath; + settings->setValue("paths/decks", deckPath); +} + +void SettingsCache::setPicsPath(const QString &_picsPath) +{ + picsPath = _picsPath; + settings->setValue("paths/pics", picsPath); + emit picsPathChanged(); +} + +void SettingsCache::setCardDatabasePath(const QString &_cardDatabasePath) +{ + cardDatabasePath = _cardDatabasePath; + settings->setValue("paths/carddatabase", cardDatabasePath); + emit cardDatabasePathChanged(); +} + +void SettingsCache::setPicDownload(int _picDownload) +{ + picDownload = _picDownload; + settings->setValue("personal/picturedownload", picDownload); + emit picDownloadChanged(); +} + +void SettingsCache::setDoubleClickToPlay(int _doubleClickToPlay) +{ + doubleClickToPlay = _doubleClickToPlay; + settings->setValue("interface/doubleclicktoplay", doubleClickToPlay); +} + +void SettingsCache::setEconomicGrid(int _economicGrid) +{ + economicGrid = _economicGrid; + settings->setValue("table/economic", economicGrid); +} diff --git a/cockatrice/src/settingscache.h b/cockatrice/src/settingscache.h new file mode 100644 index 00000000..11543bbb --- /dev/null +++ b/cockatrice/src/settingscache.h @@ -0,0 +1,44 @@ +#ifndef SETTINGSCACHE_H +#define SETTINGSCACHE_H + +#include + +class QSettings; + +class SettingsCache : public QObject { + Q_OBJECT +signals: + void langChanged(); + void picsPathChanged(); + void cardDatabasePathChanged(); + void picDownloadChanged(); +private: + QSettings *settings; + + QString lang; + QString deckPath, picsPath, cardDatabasePath; + bool picDownload; + bool doubleClickToPlay; + bool economicGrid; +public: + SettingsCache(); + QString getLang() const { return lang; } + QString getDeckPath() const { return deckPath; } + QString getPicsPath() const { return picsPath; } + QString getCardDatabasePath() const { return cardDatabasePath; } + bool getPicDownload() const { return picDownload; } + bool getDoubleClickToPlay() const { return doubleClickToPlay; } + bool getEconomicGrid() const { return economicGrid; } +public slots: + void setLang(const QString &_lang); + void setDeckPath(const QString &_deckPath); + void setPicsPath(const QString &_picsPath); + void setCardDatabasePath(const QString &_cardDatabasePath); + void setPicDownload(int _picDownload); + void setDoubleClickToPlay(int _doubleClickToPlay); + void setEconomicGrid(int _economicGrid); +}; + +extern SettingsCache *settingsCache; + +#endif \ No newline at end of file diff --git a/cockatrice/src/tab_game.cpp b/cockatrice/src/tab_game.cpp index 0ea38d58..a0695611 100644 --- a/cockatrice/src/tab_game.cpp +++ b/cockatrice/src/tab_game.cpp @@ -49,6 +49,7 @@ TabGame::TabGame(Client *_client, int _gameId, const QString &_gameDescription, cardInfo = new CardInfoWidget; playerListWidget = new PlayerListWidget; + playerListWidget->setFocusPolicy(Qt::NoFocus); messageLog = new MessageLogWidget; sayLabel = new QLabel; sayEdit = new QLineEdit; diff --git a/cockatrice/translations/cockatrice_de.ts b/cockatrice/translations/cockatrice_de.ts index 2880ed54..b7b6be57 100644 --- a/cockatrice/translations/cockatrice_de.ts +++ b/cockatrice/translations/cockatrice_de.ts @@ -27,49 +27,49 @@ AppearanceSettingsPage - + Zone background pictures Hintergrundbilder für Kartenzonen - + Path to hand background: Hintergrundbild für die Hand: - + Path to table background: Hintergrundbild für das Spielfeld: - + Path to player info background: Hintergrundbild für den Spielerbereich: - + Table grid layout Spielfeldraster - + Economic layout Platzsparende Anordnung - + Zone view layout Aussehen des Zonenbetrachters - + Sort alphabetically by default standardmäßig alphabetisch sortieren - - - + + + Choose path Pfad auswählen @@ -555,27 +555,32 @@ DlgSettings - + Settings Einstellungen - + General Allgemeines - + Appearance Erscheinungsbild - + + User interface + Bedienung + + + Messages Nachrichten - + &Close S&chließen @@ -958,51 +963,51 @@ GeneralSettingsPage - - + + + - Choose path Pfad auswählen - + Personal settings Persönliche Einstellungen - + Language: Sprache: - + Download card pictures on the fly Kartenbilder dynamisch herunterladen - + Paths Pfade - + Decks directory: Verzeichnis mit Decklisten: - + Pictures directory: Verzeichnis mit Bilddateien: - + Path to card database: Pfad zur Kartendatenbank: - - + + English Deutsch @@ -1731,12 +1736,12 @@ MessagesSettingsPage - + &Add &Hinzufügen - + &Remove &Entfernen @@ -1749,12 +1754,12 @@ Entfernen - + Add message Nachricht hinzufügen - + Message: Nachricht: @@ -2235,27 +2240,27 @@ QObject - + Maindeck Hauptdeck - + Sideboard Sideboard - + Cockatrice decks (*.cod) Cockatrice Decks (*.cod) - + Plain text decks (*.dec *.mwDeck) Text Decks (*.dec *.mwDeck) - + All files (*.*) Alle Dateien (*.*) @@ -2393,117 +2398,117 @@ Bitte geben Sie einen Namen ein: TabGame - + &Game Spi&el - + Next &phase Nächste &Phase - + Ctrl+Space Ctrl+Space - + Next &turn Nächster &Zug - + Ctrl+Return Ctrl+Return - + Ctrl+Enter Ctrl+Enter - + &Remove all local arrows &Lokale Pfeile entfernen - + Ctrl+R Ctrl+R - + &Concede - + F2 F2 - + &Leave game Spiel ver&lassen - + Load &local deck &Lokales Deck laden - + Load d&eck from server Deck vom Server l&aden - + S&tart game Spiel s&tarten - + &Say: &Sagen: - + Close most recent zone view Letzte Zonenansicht schließen - + Esc Esc - + Concede Aufgeben - + Are you sure you want to concede this game? Sind Sie sicher, dass Sie das Spiel aufgeben möchten? - + Leave game Spiel verlassen - + Are you sure you want to leave this game? Sind Sie sicher, dass Sie das Spiel verlassen möchten? - + Load deck Deck laden - + Game %1: %2 Spiel %1: %2 @@ -2531,6 +2536,19 @@ Bitte geben Sie einen Namen ein: Spiel %1 + + UserInterfaceSettingsPage + + + General interface settings + Allgemeine Bedienung + + + + &Double-click cards to play them (instead of single-click) + + + WndDeckEditor diff --git a/cockatrice/translations/cockatrice_en.ts b/cockatrice/translations/cockatrice_en.ts index f92af399..22ec8de3 100644 --- a/cockatrice/translations/cockatrice_en.ts +++ b/cockatrice/translations/cockatrice_en.ts @@ -4,49 +4,49 @@ AppearanceSettingsPage - + Zone background pictures - + Path to hand background: - + Path to table background: - + Path to player info background: - + Table grid layout - + Economic layout - + Zone view layout - + Sort alphabetically by default - - - + + + Choose path @@ -448,27 +448,32 @@ DlgSettings - + Settings - + General - + Appearance - + + User interface + + + + Messages - + &Close @@ -585,51 +590,51 @@ GeneralSettingsPage - - + + + - Choose path - + Personal settings - + Language: - + Download card pictures on the fly - + Paths - + Decks directory: - + Pictures directory: - + Path to card database: - - + + English English @@ -1066,22 +1071,22 @@ MessagesSettingsPage - + &Add - + &Remove - + Add message - + Message: @@ -1506,27 +1511,27 @@ QObject - + Maindeck - + Sideboard - + Cockatrice decks (*.cod) - + Plain text decks (*.dec *.mwDeck) - + All files (*.*) @@ -1663,117 +1668,117 @@ Please enter a name: TabGame - + &Game - + Next &phase - + Ctrl+Space - + Next &turn - + Ctrl+Return - + Ctrl+Enter - + &Remove all local arrows - + Ctrl+R - + &Concede - + F2 - + &Leave game - + Load &local deck - + Load d&eck from server - + S&tart game - + &Say: - + Close most recent zone view - + Esc - + Concede - + Are you sure you want to concede this game? - + Leave game - + Are you sure you want to leave this game? - + Load deck - + Game %1: %2 @@ -1786,6 +1791,19 @@ Please enter a name: + + UserInterfaceSettingsPage + + + General interface settings + + + + + &Double-click cards to play them (instead of single-click) + + + WndDeckEditor