Theme manager
This is the first implementation of a theme manager. It’s a rebased and revisited version of #792.
|
@ -221,7 +221,7 @@ option(WITH_CLIENT "build cockatrice" ON)
|
|||
if(WITH_CLIENT)
|
||||
add_subdirectory(cockatrice)
|
||||
add_subdirectory(sounds)
|
||||
add_subdirectory(zonebg)
|
||||
add_subdirectory(themes)
|
||||
SET(CPACK_INSTALL_CMAKE_PROJECTS "cockatrice;cockatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})
|
||||
endif()
|
||||
|
||||
|
|
|
@ -84,6 +84,7 @@ SET(cockatrice_SOURCES
|
|||
src/playerlistwidget.cpp
|
||||
src/pixmapgenerator.cpp
|
||||
src/settingscache.cpp
|
||||
src/thememanager.cpp
|
||||
src/localserver.cpp
|
||||
src/localserverinterface.cpp
|
||||
src/localclient.cpp
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<RCC>
|
||||
<qresource prefix="/" >
|
||||
<file alias="back.svg" >resources/back.svg</file>
|
||||
<file>resources/back.svg</file>
|
||||
<file>resources/lock.svg</file>
|
||||
<file>resources/icon_delete.svg</file>
|
||||
<file>resources/icon_tab_changed.svg</file>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "carddatabase.h"
|
||||
#include "settingscache.h"
|
||||
#include "thememanager.h"
|
||||
#include <QDir>
|
||||
#include <QDirIterator>
|
||||
#include <QFile>
|
||||
|
@ -570,7 +571,7 @@ void CardInfo::loadPixmap(QPixmap &pixmap)
|
|||
pixmap = QPixmap();
|
||||
|
||||
if (getName().isEmpty()) {
|
||||
pixmap.load(settingsCache->getCardBackPicturePath());
|
||||
pixmap = themeManager->getCardBackPixmap();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -594,15 +595,15 @@ void CardInfo::getPixmap(QSize size, QPixmap &pixmap)
|
|||
QPixmap bigPixmap;
|
||||
loadPixmap(bigPixmap);
|
||||
if (bigPixmap.isNull()) {
|
||||
if (!getName().isEmpty()) {
|
||||
pixmap = QPixmap(); // null
|
||||
return;
|
||||
} else {
|
||||
QSvgRenderer svg(QString(":/back.svg"));
|
||||
if (getName().isEmpty()) {
|
||||
QSvgRenderer svg(QString("theme:back.svg"));
|
||||
bigPixmap = QPixmap(svg.defaultSize());
|
||||
bigPixmap.fill(Qt::transparent);
|
||||
QPainter painter(&bigPixmap);
|
||||
svg.render(&painter);
|
||||
} else {
|
||||
pixmap = QPixmap(); // null
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -724,7 +725,7 @@ CardDatabase::CardDatabase(QObject *parent)
|
|||
noCard = new CardInfo(this);
|
||||
QPixmap tmp;
|
||||
noCard->loadPixmap(tmp); // cache pixmap for card back
|
||||
connect(settingsCache, SIGNAL(cardBackPicturePathChanged()), noCard, SLOT(updatePixmapCache()));
|
||||
connect(themeManager, SIGNAL(themeChanged()), noCard, SLOT(updatePixmapCache()));
|
||||
}
|
||||
|
||||
CardDatabase::~CardDatabase()
|
||||
|
|
|
@ -463,7 +463,7 @@ void DeckListModel::printDeckList(QPrinter *printer)
|
|||
cursor.insertBlock(headerBlockFormat, headerCharFormat);
|
||||
|
||||
for (int i = 0; i < root->size(); i++) {
|
||||
cursor.insertHtml("<br><img src=:/resources/hr.jpg>");
|
||||
cursor.insertHtml("<br><img src=theme:hr.jpg>");
|
||||
//cursor.insertHtml("<hr>");
|
||||
cursor.insertBlock(headerBlockFormat, headerCharFormat);
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "decklist.h"
|
||||
#include "carddatabase.h"
|
||||
#include "settingscache.h"
|
||||
#include "thememanager.h"
|
||||
#include "main.h"
|
||||
|
||||
DeckViewCardDragItem::DeckViewCardDragItem(DeckViewCard *_item, const QPointF &_hotSpot, AbstractCardDragItem *parentDrag)
|
||||
|
@ -128,10 +129,6 @@ void DeckViewCard::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
|||
DeckViewCardContainer::DeckViewCardContainer(const QString &_name)
|
||||
: QGraphicsItem(), name(_name), width(0), height(0)
|
||||
{
|
||||
QString bgPath = settingsCache->getTableBgPath();
|
||||
if (!bgPath.isEmpty())
|
||||
bgPixmap.load(bgPath);
|
||||
|
||||
setCacheMode(DeviceCoordinateCache);
|
||||
}
|
||||
|
||||
|
@ -144,17 +141,7 @@ void DeckViewCardContainer::paint(QPainter *painter, const QStyleOptionGraphicsI
|
|||
{
|
||||
qreal totalTextWidth = getCardTypeTextWidth();
|
||||
|
||||
if (bgPixmap.isNull()) {
|
||||
QLinearGradient grad1(0, 0, 1, 0);
|
||||
grad1.setCoordinateMode(QGradient::ObjectBoundingMode);
|
||||
grad1.setColorAt(0, QColor(30, 30, 30));
|
||||
grad1.setColorAt(1, QColor(80, 80, 80));
|
||||
painter->fillRect(QRectF(0, 0, width, height), QBrush(grad1));
|
||||
|
||||
painter->fillRect(boundingRect(), QColor(0, 0, 0, 80));
|
||||
}
|
||||
else
|
||||
painter->fillRect(boundingRect(), QBrush(bgPixmap));
|
||||
painter->fillRect(boundingRect(), themeManager->getTableBgBrush());
|
||||
painter->setPen(QColor(255, 255, 255, 100));
|
||||
painter->drawLine(QPointF(0, separatorY), QPointF(width, separatorY));
|
||||
|
||||
|
|
|
@ -52,7 +52,6 @@ private:
|
|||
QMultiMap<QString, DeckViewCard *> cardsByType;
|
||||
QList<QPair<int, int> > currentRowsAndCols;
|
||||
qreal width, height;
|
||||
QPixmap bgPixmap;
|
||||
int getCardTypeTextWidth() const;
|
||||
public:
|
||||
enum { Type = typeDeckViewCardContainer };
|
||||
|
|
|
@ -83,10 +83,10 @@ DlgEditTokens::DlgEditTokens(CardDatabaseModel *_cardDatabaseModel, QWidget *par
|
|||
connect(chooseTokenView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex, QModelIndex)), this, SLOT(tokenSelectionChanged(QModelIndex, QModelIndex)));
|
||||
|
||||
QAction *aAddToken = new QAction(tr("Add token"), this);
|
||||
aAddToken->setIcon(QIcon(":/resources/increment.svg"));
|
||||
aAddToken->setIcon(QIcon("theme:increment.svg"));
|
||||
connect(aAddToken, SIGNAL(triggered()), this, SLOT(actAddToken()));
|
||||
QAction *aRemoveToken = new QAction(tr("Remove token"), this);
|
||||
aRemoveToken->setIcon(QIcon(":/resources/decrement.svg"));
|
||||
aRemoveToken->setIcon(QIcon("theme:decrement.svg"));
|
||||
connect(aRemoveToken, SIGNAL(triggered()), this, SLOT(actRemoveToken()));
|
||||
|
||||
QToolBar *databaseToolBar = new QToolBar;
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "dlg_settings.h"
|
||||
#include "main.h"
|
||||
#include "settingscache.h"
|
||||
#include "thememanager.h"
|
||||
#include "priceupdater.h"
|
||||
#include "soundengine.h"
|
||||
|
||||
|
@ -234,67 +235,23 @@ void GeneralSettingsPage::retranslateUi()
|
|||
|
||||
AppearanceSettingsPage::AppearanceSettingsPage()
|
||||
{
|
||||
QIcon deleteIcon(":/resources/icon_delete.svg");
|
||||
|
||||
handBgEdit = new QLineEdit(settingsCache->getHandBgPath());
|
||||
handBgEdit->setReadOnly(true);
|
||||
QPushButton *handBgClearButton = new QPushButton(deleteIcon, QString());
|
||||
connect(handBgClearButton, SIGNAL(clicked()), this, SLOT(handBgClearButtonClicked()));
|
||||
QPushButton *handBgButton = new QPushButton("...");
|
||||
connect(handBgButton, SIGNAL(clicked()), this, SLOT(handBgButtonClicked()));
|
||||
|
||||
stackBgEdit = new QLineEdit(settingsCache->getStackBgPath());
|
||||
stackBgEdit->setReadOnly(true);
|
||||
QPushButton *stackBgClearButton = new QPushButton(deleteIcon, QString());
|
||||
connect(stackBgClearButton, SIGNAL(clicked()), this, SLOT(stackBgClearButtonClicked()));
|
||||
QPushButton *stackBgButton = new QPushButton("...");
|
||||
connect(stackBgButton, SIGNAL(clicked()), this, SLOT(stackBgButtonClicked()));
|
||||
QString themeName = settingsCache->getThemeName();
|
||||
|
||||
tableBgEdit = new QLineEdit(settingsCache->getTableBgPath());
|
||||
tableBgEdit->setReadOnly(true);
|
||||
QPushButton *tableBgClearButton = new QPushButton(deleteIcon, QString());
|
||||
connect(tableBgClearButton, SIGNAL(clicked()), this, SLOT(tableBgClearButtonClicked()));
|
||||
QPushButton *tableBgButton = new QPushButton("...");
|
||||
connect(tableBgButton, SIGNAL(clicked()), this, SLOT(tableBgButtonClicked()));
|
||||
|
||||
playerAreaBgEdit = new QLineEdit(settingsCache->getPlayerBgPath());
|
||||
playerAreaBgEdit->setReadOnly(true);
|
||||
QPushButton *playerAreaBgClearButton = new QPushButton(deleteIcon, QString());
|
||||
connect(playerAreaBgClearButton, SIGNAL(clicked()), this, SLOT(playerAreaBgClearButtonClicked()));
|
||||
QPushButton *playerAreaBgButton = new QPushButton("...");
|
||||
connect(playerAreaBgButton, SIGNAL(clicked()), this, SLOT(playerAreaBgButtonClicked()));
|
||||
|
||||
cardBackPicturePathEdit = new QLineEdit(settingsCache->getCardBackPicturePath());
|
||||
cardBackPicturePathEdit->setReadOnly(true);
|
||||
QPushButton *cardBackPicturePathClearButton = new QPushButton(deleteIcon, QString());
|
||||
connect(cardBackPicturePathClearButton, SIGNAL(clicked()), this, SLOT(cardBackPicturePathClearButtonClicked()));
|
||||
QPushButton *cardBackPicturePathButton = new QPushButton("...");
|
||||
connect(cardBackPicturePathButton, SIGNAL(clicked()), this, SLOT(cardBackPicturePathButtonClicked()));
|
||||
|
||||
QGridLayout *zoneBgGrid = new QGridLayout;
|
||||
zoneBgGrid->addWidget(&handBgLabel, 0, 0);
|
||||
zoneBgGrid->addWidget(handBgEdit, 0, 1);
|
||||
zoneBgGrid->addWidget(handBgClearButton, 0, 2);
|
||||
zoneBgGrid->addWidget(handBgButton, 0, 3);
|
||||
zoneBgGrid->addWidget(&stackBgLabel, 1, 0);
|
||||
zoneBgGrid->addWidget(stackBgEdit, 1, 1);
|
||||
zoneBgGrid->addWidget(stackBgClearButton, 1, 2);
|
||||
zoneBgGrid->addWidget(stackBgButton, 1, 3);
|
||||
zoneBgGrid->addWidget(&tableBgLabel, 2, 0);
|
||||
zoneBgGrid->addWidget(tableBgEdit, 2, 1);
|
||||
zoneBgGrid->addWidget(tableBgClearButton, 2, 2);
|
||||
zoneBgGrid->addWidget(tableBgButton, 2, 3);
|
||||
zoneBgGrid->addWidget(&playerAreaBgLabel, 3, 0);
|
||||
zoneBgGrid->addWidget(playerAreaBgEdit, 3, 1);
|
||||
zoneBgGrid->addWidget(playerAreaBgClearButton, 3, 2);
|
||||
zoneBgGrid->addWidget(playerAreaBgButton, 3, 3);
|
||||
zoneBgGrid->addWidget(&cardBackPicturePathLabel, 4, 0);
|
||||
zoneBgGrid->addWidget(cardBackPicturePathEdit, 4, 1);
|
||||
zoneBgGrid->addWidget(cardBackPicturePathClearButton, 4, 2);
|
||||
zoneBgGrid->addWidget(cardBackPicturePathButton, 4, 3);
|
||||
QStringList themeDirs = themeManager->getAvailableThemes().keys();
|
||||
for (int i = 0; i < themeDirs.size(); i++) {
|
||||
themeBox.addItem(themeDirs[i]);
|
||||
if (themeDirs[i] == themeName)
|
||||
themeBox.setCurrentIndex(i);
|
||||
}
|
||||
|
||||
zoneBgGroupBox = new QGroupBox;
|
||||
zoneBgGroupBox->setLayout(zoneBgGrid);
|
||||
connect(&themeBox, SIGNAL(currentIndexChanged(int)), this, SLOT(themeBoxChanged(int)));
|
||||
|
||||
QGridLayout *themeGrid = new QGridLayout;
|
||||
themeGrid->addWidget(&themeLabel, 0, 0);
|
||||
themeGrid->addWidget(&themeBox, 0, 1);
|
||||
|
||||
themeGroupBox = new QGroupBox;
|
||||
themeGroupBox->setLayout(themeGrid);
|
||||
|
||||
displayCardNamesCheckBox.setChecked(settingsCache->getDisplayCardNames());
|
||||
connect(&displayCardNamesCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setDisplayCardNames(int)));
|
||||
|
@ -339,7 +296,7 @@ AppearanceSettingsPage::AppearanceSettingsPage()
|
|||
tableGroupBox->setLayout(tableGrid);
|
||||
|
||||
QVBoxLayout *mainLayout = new QVBoxLayout;
|
||||
mainLayout->addWidget(zoneBgGroupBox);
|
||||
mainLayout->addWidget(themeGroupBox);
|
||||
mainLayout->addWidget(cardsGroupBox);
|
||||
mainLayout->addWidget(handGroupBox);
|
||||
mainLayout->addWidget(tableGroupBox);
|
||||
|
@ -347,14 +304,17 @@ AppearanceSettingsPage::AppearanceSettingsPage()
|
|||
setLayout(mainLayout);
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::themeBoxChanged(int index)
|
||||
{
|
||||
QStringList themeDirs = themeManager->getAvailableThemes().keys();
|
||||
if(index >= 0 && index < themeDirs.count())
|
||||
settingsCache->setThemeName(themeDirs.at(index));
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::retranslateUi()
|
||||
{
|
||||
zoneBgGroupBox->setTitle(tr("Zone background pictures"));
|
||||
handBgLabel.setText(tr("Hand background:"));
|
||||
stackBgLabel.setText(tr("Stack background:"));
|
||||
tableBgLabel.setText(tr("Table background:"));
|
||||
playerAreaBgLabel.setText(tr("Player info background:"));
|
||||
cardBackPicturePathLabel.setText(tr("Card back:"));
|
||||
themeGroupBox->setTitle(tr("Theme settings"));
|
||||
themeLabel.setText(tr("Current theme:"));
|
||||
|
||||
cardsGroupBox->setTitle(tr("Card rendering"));
|
||||
displayCardNamesCheckBox.setText(tr("Display card names on cards having a picture"));
|
||||
|
@ -369,86 +329,6 @@ void AppearanceSettingsPage::retranslateUi()
|
|||
minPlayersForMultiColumnLayoutLabel.setText(tr("Minimum player count for multi-column layout:"));
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::handBgClearButtonClicked()
|
||||
{
|
||||
handBgEdit->setText(QString());
|
||||
settingsCache->setHandBgPath(QString());
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::handBgButtonClicked()
|
||||
{
|
||||
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
|
||||
handBgEdit->setText(path);
|
||||
settingsCache->setHandBgPath(path);
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::stackBgClearButtonClicked()
|
||||
{
|
||||
stackBgEdit->setText(QString());
|
||||
settingsCache->setStackBgPath(QString());
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::stackBgButtonClicked()
|
||||
{
|
||||
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
|
||||
stackBgEdit->setText(path);
|
||||
settingsCache->setStackBgPath(path);
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::tableBgClearButtonClicked()
|
||||
{
|
||||
tableBgEdit->setText(QString());
|
||||
settingsCache->setTableBgPath(QString());
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::tableBgButtonClicked()
|
||||
{
|
||||
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
|
||||
tableBgEdit->setText(path);
|
||||
settingsCache->setTableBgPath(path);
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::playerAreaBgClearButtonClicked()
|
||||
{
|
||||
playerAreaBgEdit->setText(QString());
|
||||
settingsCache->setPlayerBgPath(QString());
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::playerAreaBgButtonClicked()
|
||||
{
|
||||
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
|
||||
playerAreaBgEdit->setText(path);
|
||||
settingsCache->setPlayerBgPath(path);
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::cardBackPicturePathClearButtonClicked()
|
||||
{
|
||||
cardBackPicturePathEdit->setText(QString());
|
||||
settingsCache->setCardBackPicturePath(QString());
|
||||
}
|
||||
|
||||
void AppearanceSettingsPage::cardBackPicturePathButtonClicked()
|
||||
{
|
||||
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
|
||||
cardBackPicturePathEdit->setText(path);
|
||||
settingsCache->setCardBackPicturePath(path);
|
||||
}
|
||||
|
||||
UserInterfaceSettingsPage::UserInterfaceSettingsPage()
|
||||
{
|
||||
notificationsEnabledCheckBox.setChecked(settingsCache->getNotificationsEnabled());
|
||||
|
@ -588,10 +468,10 @@ MessagesSettingsPage::MessagesSettingsPage()
|
|||
messageList->addItem(settings.value(QString("msg%1").arg(i)).toString());
|
||||
|
||||
aAdd = new QAction(this);
|
||||
aAdd->setIcon(QIcon(":/resources/increment.svg"));
|
||||
aAdd->setIcon(QIcon("theme:increment.svg"));
|
||||
connect(aAdd, SIGNAL(triggered()), this, SLOT(actAdd()));
|
||||
aRemove = new QAction(this);
|
||||
aRemove->setIcon(QIcon(":/resources/decrement.svg"));
|
||||
aRemove->setIcon(QIcon("theme:decrement.svg"));
|
||||
connect(aRemove, SIGNAL(triggered()), this, SLOT(actRemove()));
|
||||
|
||||
QToolBar *messageToolBar = new QToolBar;
|
||||
|
@ -679,7 +559,7 @@ void MessagesSettingsPage::retranslateUi()
|
|||
|
||||
SoundSettingsPage::SoundSettingsPage()
|
||||
{
|
||||
QIcon deleteIcon(":/resources/icon_delete.svg");
|
||||
QIcon deleteIcon("theme:icon_delete.svg");
|
||||
|
||||
soundEnabledCheckBox.setChecked(settingsCache->getSoundEnabled());
|
||||
connect(&soundEnabledCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setSoundEnabled(int)));
|
||||
|
@ -815,32 +695,32 @@ void DlgSettings::createIcons()
|
|||
generalButton = new QListWidgetItem(contentsWidget);
|
||||
generalButton->setTextAlignment(Qt::AlignHCenter);
|
||||
generalButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
generalButton->setIcon(QIcon(":/resources/icon_config_general.svg"));
|
||||
generalButton->setIcon(QIcon("theme:icon_config_general.svg"));
|
||||
|
||||
appearanceButton = new QListWidgetItem(contentsWidget);
|
||||
appearanceButton->setTextAlignment(Qt::AlignHCenter);
|
||||
appearanceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
appearanceButton->setIcon(QIcon(":/resources/icon_config_appearance.svg"));
|
||||
appearanceButton->setIcon(QIcon("theme:icon_config_appearance.svg"));
|
||||
|
||||
userInterfaceButton = new QListWidgetItem(contentsWidget);
|
||||
userInterfaceButton->setTextAlignment(Qt::AlignHCenter);
|
||||
userInterfaceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
userInterfaceButton->setIcon(QIcon(":/resources/icon_config_interface.svg"));
|
||||
userInterfaceButton->setIcon(QIcon("theme:icon_config_interface.svg"));
|
||||
|
||||
deckEditorButton = new QListWidgetItem(contentsWidget);
|
||||
deckEditorButton->setTextAlignment(Qt::AlignHCenter);
|
||||
deckEditorButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
deckEditorButton->setIcon(QIcon(":/resources/icon_config_deckeditor.svg"));
|
||||
deckEditorButton->setIcon(QIcon("theme:icon_config_deckeditor.svg"));
|
||||
|
||||
messagesButton = new QListWidgetItem(contentsWidget);
|
||||
messagesButton->setTextAlignment(Qt::AlignHCenter);
|
||||
messagesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
messagesButton->setIcon(QIcon(":/resources/icon_config_messages.svg"));
|
||||
messagesButton->setIcon(QIcon("theme:icon_config_messages.svg"));
|
||||
|
||||
soundButton = new QListWidgetItem(contentsWidget);
|
||||
soundButton->setTextAlignment(Qt::AlignHCenter);
|
||||
soundButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
soundButton->setIcon(QIcon(":/resources/icon_config_sound.svg"));
|
||||
soundButton->setIcon(QIcon("theme:icon_config_sound.svg"));
|
||||
|
||||
connect(contentsWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(changePage(QListWidgetItem *, QListWidgetItem *)));
|
||||
}
|
||||
|
|
|
@ -71,40 +71,17 @@ private:
|
|||
class AppearanceSettingsPage : public AbstractSettingsPage {
|
||||
Q_OBJECT
|
||||
private slots:
|
||||
void handBgClearButtonClicked();
|
||||
void handBgButtonClicked();
|
||||
void stackBgClearButtonClicked();
|
||||
void stackBgButtonClicked();
|
||||
void tableBgClearButtonClicked();
|
||||
void tableBgButtonClicked();
|
||||
void playerAreaBgClearButtonClicked();
|
||||
void playerAreaBgButtonClicked();
|
||||
void cardBackPicturePathClearButtonClicked();
|
||||
void cardBackPicturePathButtonClicked();
|
||||
signals:
|
||||
void handBgChanged(const QString &path);
|
||||
void stackBgChanged(const QString &path);
|
||||
void tableBgChanged(const QString &path);
|
||||
void playerAreaBgChanged(const QString &path);
|
||||
void cardBackPicturePathChanged(const QString &path);
|
||||
void themeBoxChanged(int index);
|
||||
private:
|
||||
QLabel handBgLabel;
|
||||
QLabel stackBgLabel;
|
||||
QLabel tableBgLabel;
|
||||
QLabel playerAreaBgLabel;
|
||||
QLabel cardBackPicturePathLabel;
|
||||
QLabel themeLabel;
|
||||
QComboBox themeBox;
|
||||
QLabel minPlayersForMultiColumnLayoutLabel;
|
||||
QLineEdit *handBgEdit;
|
||||
QLineEdit *stackBgEdit;
|
||||
QLineEdit *tableBgEdit;
|
||||
QLineEdit *playerAreaBgEdit;
|
||||
QLineEdit *cardBackPicturePathEdit;
|
||||
QCheckBox displayCardNamesCheckBox;
|
||||
QCheckBox cardScalingCheckBox;
|
||||
QCheckBox horizontalHandCheckBox;
|
||||
QCheckBox leftJustifiedHandCheckBox;
|
||||
QCheckBox invertVerticalCoordinateCheckBox;
|
||||
QGroupBox *zoneBgGroupBox;
|
||||
QGroupBox *themeGroupBox;
|
||||
QGroupBox *cardsGroupBox;
|
||||
QGroupBox *handGroupBox;
|
||||
QGroupBox *tableGroupBox;
|
||||
|
|
|
@ -60,10 +60,10 @@ GameSelector::GameSelector(AbstractClient *_client, const TabSupervisor *_tabSup
|
|||
gameListView->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||||
#endif
|
||||
filterButton = new QPushButton;
|
||||
filterButton->setIcon(QIcon(":/resources/icon_search_black.svg"));
|
||||
filterButton->setIcon(QIcon("theme:icon_search_black.svg"));
|
||||
connect(filterButton, SIGNAL(clicked()), this, SLOT(actSetFilter()));
|
||||
clearFilterButton = new QPushButton;
|
||||
clearFilterButton->setIcon(QIcon(":/resources/icon_clearsearch.svg"));
|
||||
clearFilterButton->setIcon(QIcon("theme:icon_clearsearch.svg"));
|
||||
clearFilterButton->setEnabled(true);
|
||||
connect(clearFilterButton, SIGNAL(clicked()), this, SLOT(actClearFilter()));
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ void HandCounter::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*op
|
|||
#else
|
||||
if (!QPixmapCache::find("handCounter" + QString::number(translatedSize.width()), cachedPixmap)) {
|
||||
#endif
|
||||
QSvgRenderer svg(QString(":/resources/hand.svg"));
|
||||
QSvgRenderer svg(QString("theme:hand.svg"));
|
||||
cachedPixmap = QPixmap(translatedSize);
|
||||
cachedPixmap.fill(Qt::transparent);
|
||||
QPainter painter(&cachedPixmap);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <QPainter>
|
||||
#include "handzone.h"
|
||||
#include "settingscache.h"
|
||||
#include "thememanager.h"
|
||||
#include "player.h"
|
||||
#include "carddragitem.h"
|
||||
#include "carditem.h"
|
||||
|
@ -10,16 +11,13 @@
|
|||
HandZone::HandZone(Player *_p, bool _contentsKnown, int _zoneHeight, QGraphicsItem *parent)
|
||||
: SelectZone(_p, "hand", false, false, _contentsKnown, parent), zoneHeight(_zoneHeight)
|
||||
{
|
||||
connect(settingsCache, SIGNAL(handBgPathChanged()), this, SLOT(updateBgPixmap()));
|
||||
updateBgPixmap();
|
||||
connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg()));
|
||||
updateBg();
|
||||
setCacheMode(DeviceCoordinateCache);
|
||||
}
|
||||
|
||||
void HandZone::updateBgPixmap()
|
||||
void HandZone::updateBg()
|
||||
{
|
||||
QString bgPath = settingsCache->getHandBgPath();
|
||||
if (!bgPath.isEmpty())
|
||||
bgPixmap.load(bgPath);
|
||||
update();
|
||||
}
|
||||
|
||||
|
@ -77,10 +75,7 @@ QRectF HandZone::boundingRect() const
|
|||
|
||||
void HandZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
|
||||
{
|
||||
if (bgPixmap.isNull())
|
||||
painter->fillRect(boundingRect(), QColor(30, 30, 30));
|
||||
else
|
||||
painter->fillRect(boundingRect(), QBrush(bgPixmap));
|
||||
painter->fillRect(boundingRect(), themeManager->getHandBgBrush());
|
||||
}
|
||||
|
||||
void HandZone::reorganizeCards()
|
||||
|
|
|
@ -7,9 +7,8 @@ class HandZone : public SelectZone {
|
|||
Q_OBJECT
|
||||
private:
|
||||
qreal width, zoneHeight;
|
||||
QPixmap bgPixmap;
|
||||
private slots:
|
||||
void updateBgPixmap();
|
||||
void updateBg();
|
||||
public slots:
|
||||
void updateOrientation();
|
||||
public:
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "dlg_settings.h"
|
||||
#include "carddatabase.h"
|
||||
#include "settingscache.h"
|
||||
#include "thememanager.h"
|
||||
#include "pixmapgenerator.h"
|
||||
#include "rng_sfmt.h"
|
||||
#include "soundengine.h"
|
||||
|
@ -50,7 +51,7 @@ SettingsCache *settingsCache;
|
|||
RNG_Abstract *rng;
|
||||
SoundEngine *soundEngine;
|
||||
QSystemTrayIcon *trayIcon;
|
||||
|
||||
ThemeManager *themeManager;
|
||||
|
||||
const QString translationPrefix = "cockatrice";
|
||||
#ifdef TRANSLATION_PATH
|
||||
|
@ -132,6 +133,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
rng = new RNG_SFMT;
|
||||
settingsCache = new SettingsCache;
|
||||
themeManager = new ThemeManager;
|
||||
db = new CardDatabase;
|
||||
|
||||
qtTranslator = new QTranslator;
|
||||
|
@ -195,13 +197,14 @@ int main(int argc, char *argv[])
|
|||
|
||||
if (settingsValid()) {
|
||||
qDebug("main(): starting main program");
|
||||
|
||||
soundEngine = new SoundEngine;
|
||||
qDebug("main(): SoundEngine constructor finished");
|
||||
|
||||
MainWindow ui;
|
||||
qDebug("main(): MainWindow constructor finished");
|
||||
|
||||
QIcon icon(":/resources/appicon.svg");
|
||||
QIcon icon("theme:appicon.svg");
|
||||
ui.setWindowIcon(icon);
|
||||
|
||||
ui.show();
|
||||
|
|
|
@ -16,7 +16,7 @@ QPixmap PhasePixmapGenerator::generatePixmap(int height, QString name)
|
|||
if (pmCache.contains(key))
|
||||
return pmCache.value(key);
|
||||
|
||||
QSvgRenderer svg(QString(":/resources/phases/icon_phase_" + name + ".svg"));
|
||||
QSvgRenderer svg(QString("theme:phases/icon_phase_" + name + ".svg"));
|
||||
|
||||
QPixmap pixmap(height, height);
|
||||
pixmap.fill(Qt::transparent);
|
||||
|
@ -36,13 +36,13 @@ QPixmap CounterPixmapGenerator::generatePixmap(int height, QString name, bool hi
|
|||
if (pmCache.contains(key))
|
||||
return pmCache.value(key);
|
||||
|
||||
QSvgRenderer svg(QString(":/resources/counters/" + name + ".svg"));
|
||||
QSvgRenderer svg(QString("theme:counters/" + name + ".svg"));
|
||||
|
||||
if (!svg.isValid()) {
|
||||
name = "general";
|
||||
if (highlight)
|
||||
name.append("_highlight");
|
||||
svg.load(QString(":/resources/counters/" + name + ".svg"));
|
||||
svg.load(QString("theme:counters/" + name + ".svg"));
|
||||
}
|
||||
|
||||
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
|
||||
|
@ -98,7 +98,7 @@ QPixmap GenderPixmapGenerator::generatePixmap(int height, int _gender)
|
|||
default: genderStr = "unknown";
|
||||
};
|
||||
|
||||
QSvgRenderer svg(QString(":/resources/genders/" + genderStr + ".svg"));
|
||||
QSvgRenderer svg(QString("theme:genders/" + genderStr + ".svg"));
|
||||
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
|
||||
QPixmap pixmap(width, height);
|
||||
pixmap.fill(Qt::transparent);
|
||||
|
@ -119,7 +119,7 @@ QPixmap CountryPixmapGenerator::generatePixmap(int height, const QString &countr
|
|||
if (pmCache.contains(key))
|
||||
return pmCache.value(key);
|
||||
|
||||
QSvgRenderer svg(QString(":/resources/countries/" + countryCode + ".svg"));
|
||||
QSvgRenderer svg(QString("theme:countries/" + countryCode + ".svg"));
|
||||
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
|
||||
QPixmap pixmap(width, height);
|
||||
pixmap.fill(Qt::transparent);
|
||||
|
@ -154,7 +154,7 @@ QPixmap UserLevelPixmapGenerator::generatePixmap(int height, UserLevelFlags user
|
|||
if (isBuddy)
|
||||
levelString.append("_buddy");
|
||||
|
||||
QSvgRenderer svg(QString(":/resources/userlevels/" + levelString + ".svg"));
|
||||
QSvgRenderer svg(QString("theme:userlevels/" + levelString + ".svg"));
|
||||
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
|
||||
QPixmap pixmap(width, height);
|
||||
pixmap.fill(Qt::transparent);
|
||||
|
@ -175,7 +175,7 @@ QPixmap LockPixmapGenerator::generatePixmap(int height)
|
|||
if (pmCache.contains(key))
|
||||
return pmCache.value(key);
|
||||
|
||||
QSvgRenderer svg(QString(":/resources/lock.svg"));
|
||||
QSvgRenderer svg(QString("theme:lock.svg"));
|
||||
int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height());
|
||||
QPixmap pixmap(width, height);
|
||||
pixmap.fill(Qt::transparent);
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "tab_game.h"
|
||||
#include "gamescene.h"
|
||||
#include "settingscache.h"
|
||||
#include "thememanager.h"
|
||||
#include "dlg_create_token.h"
|
||||
#include "carddatabase.h"
|
||||
#include "color.h"
|
||||
|
@ -69,25 +70,18 @@ PlayerArea::PlayerArea(QGraphicsItem *parentItem)
|
|||
: QObject(), QGraphicsItem(parentItem)
|
||||
{
|
||||
setCacheMode(DeviceCoordinateCache);
|
||||
connect(settingsCache, SIGNAL(playerBgPathChanged()), this, SLOT(updateBgPixmap()));
|
||||
updateBgPixmap();
|
||||
connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg()));
|
||||
updateBg();
|
||||
}
|
||||
|
||||
void PlayerArea::updateBgPixmap()
|
||||
void PlayerArea::updateBg()
|
||||
{
|
||||
QString bgPath = settingsCache->getPlayerBgPath();
|
||||
if (bgPath.isEmpty())
|
||||
bgPixmapBrush = QBrush(QColor(200, 200, 200));
|
||||
else {
|
||||
qDebug() << "loading" << bgPath;
|
||||
bgPixmapBrush = QBrush(QPixmap(bgPath));
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
void PlayerArea::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
|
||||
{
|
||||
painter->fillRect(bRect, bgPixmapBrush);
|
||||
painter->fillRect(bRect, themeManager->getPlayerBgBrush());
|
||||
}
|
||||
|
||||
void PlayerArea::setSize(qreal width, qreal height)
|
||||
|
|
|
@ -60,10 +60,9 @@ class PlayerArea : public QObject, public QGraphicsItem {
|
|||
Q_OBJECT
|
||||
Q_INTERFACES(QGraphicsItem)
|
||||
private:
|
||||
QBrush bgPixmapBrush;
|
||||
QRectF bRect;
|
||||
private slots:
|
||||
void updateBgPixmap();
|
||||
void updateBg();
|
||||
public:
|
||||
enum { Type = typeOther };
|
||||
int type() const { return Type; }
|
||||
|
|
|
@ -51,12 +51,12 @@ bool PlayerListTWI::operator<(const QTreeWidgetItem &other) const
|
|||
PlayerListWidget::PlayerListWidget(TabSupervisor *_tabSupervisor, AbstractClient *_client, TabGame *_game, QWidget *parent)
|
||||
: QTreeWidget(parent), tabSupervisor(_tabSupervisor), client(_client), game(_game), gameStarted(false)
|
||||
{
|
||||
readyIcon = QIcon(":/resources/icon_ready_start.svg");
|
||||
notReadyIcon = QIcon(":/resources/icon_not_ready_start.svg");
|
||||
concededIcon = QIcon(":/resources/icon_conceded.svg");
|
||||
playerIcon = QIcon(":/resources/icon_player.svg");
|
||||
spectatorIcon = QIcon(":/resources/icon_spectator.svg");
|
||||
lockIcon = QIcon(":/resources/lock.svg");
|
||||
readyIcon = QIcon("theme:icon_ready_start.svg");
|
||||
notReadyIcon = QIcon("theme:icon_not_ready_start.svg");
|
||||
concededIcon = QIcon("theme:icon_conceded.svg");
|
||||
playerIcon = QIcon("theme:icon_player.svg");
|
||||
spectatorIcon = QIcon("theme:icon_spectator.svg");
|
||||
lockIcon = QIcon("theme:lock.svg");
|
||||
|
||||
if (tabSupervisor) {
|
||||
itemDelegate = new PlayerListItemDelegate(this);
|
||||
|
|
|
@ -35,7 +35,7 @@ RemoteReplayList_TreeModel::RemoteReplayList_TreeModel(AbstractClient *_client,
|
|||
QFileIconProvider fip;
|
||||
dirIcon = fip.icon(QFileIconProvider::Folder);
|
||||
fileIcon = fip.icon(QFileIconProvider::File);
|
||||
lockIcon = QIcon(":/resources/lock.svg");
|
||||
lockIcon = QIcon("theme:lock.svg");
|
||||
|
||||
refreshTree();
|
||||
}
|
||||
|
|
|
@ -13,11 +13,7 @@ SettingsCache::SettingsCache()
|
|||
cardDatabasePath = settings->value("paths/carddatabase").toString();
|
||||
tokenDatabasePath = settings->value("paths/tokendatabase").toString();
|
||||
|
||||
handBgPath = settings->value("zonebg/hand").toString();
|
||||
stackBgPath = settings->value("zonebg/stack").toString();
|
||||
tableBgPath = settings->value("zonebg/table").toString();
|
||||
playerBgPath = settings->value("zonebg/playerarea").toString();
|
||||
cardBackPicturePath = settings->value("paths/cardbackpicture").toString();
|
||||
themeName = settings->value("theme/name").toString();
|
||||
|
||||
// we only want to reset the cache once, then its up to the user
|
||||
bool updateCache = settings->value("revert/pixmapCacheSize", false).toBool();
|
||||
|
@ -155,39 +151,11 @@ void SettingsCache::setTokenDatabasePath(const QString &_tokenDatabasePath)
|
|||
emit tokenDatabasePathChanged();
|
||||
}
|
||||
|
||||
void SettingsCache::setHandBgPath(const QString &_handBgPath)
|
||||
void SettingsCache::setThemeName(const QString &_themeName)
|
||||
{
|
||||
handBgPath = _handBgPath;
|
||||
settings->setValue("zonebg/hand", handBgPath);
|
||||
emit handBgPathChanged();
|
||||
}
|
||||
|
||||
void SettingsCache::setStackBgPath(const QString &_stackBgPath)
|
||||
{
|
||||
stackBgPath = _stackBgPath;
|
||||
settings->setValue("zonebg/stack", stackBgPath);
|
||||
emit stackBgPathChanged();
|
||||
}
|
||||
|
||||
void SettingsCache::setTableBgPath(const QString &_tableBgPath)
|
||||
{
|
||||
tableBgPath = _tableBgPath;
|
||||
settings->setValue("zonebg/table", tableBgPath);
|
||||
emit tableBgPathChanged();
|
||||
}
|
||||
|
||||
void SettingsCache::setPlayerBgPath(const QString &_playerBgPath)
|
||||
{
|
||||
playerBgPath = _playerBgPath;
|
||||
settings->setValue("zonebg/playerarea", playerBgPath);
|
||||
emit playerBgPathChanged();
|
||||
}
|
||||
|
||||
void SettingsCache::setCardBackPicturePath(const QString &_cardBackPicturePath)
|
||||
{
|
||||
cardBackPicturePath = _cardBackPicturePath;
|
||||
settings->setValue("paths/cardbackpicture", cardBackPicturePath);
|
||||
emit cardBackPicturePathChanged();
|
||||
themeName = _themeName;
|
||||
settings->setValue("theme/name", themeName);
|
||||
emit themeChanged();
|
||||
}
|
||||
|
||||
void SettingsCache::setPicDownload(int _picDownload)
|
||||
|
|
|
@ -21,11 +21,7 @@ signals:
|
|||
void picsPathChanged();
|
||||
void cardDatabasePathChanged();
|
||||
void tokenDatabasePathChanged();
|
||||
void handBgPathChanged();
|
||||
void stackBgPathChanged();
|
||||
void tableBgPathChanged();
|
||||
void playerBgPathChanged();
|
||||
void cardBackPicturePathChanged();
|
||||
void themeChanged();
|
||||
void picDownloadChanged();
|
||||
void picDownloadHqChanged();
|
||||
void displayCardNamesChanged();
|
||||
|
@ -45,8 +41,7 @@ private:
|
|||
|
||||
QByteArray mainWindowGeometry;
|
||||
QString lang;
|
||||
QString deckPath, replaysPath, picsPath, cardDatabasePath, tokenDatabasePath;
|
||||
QString handBgPath, stackBgPath, tableBgPath, playerBgPath, cardBackPicturePath;
|
||||
QString deckPath, replaysPath, picsPath, cardDatabasePath, tokenDatabasePath, themeName;
|
||||
bool picDownload;
|
||||
bool picDownloadHq;
|
||||
bool notificationsEnabled;
|
||||
|
@ -91,11 +86,7 @@ public:
|
|||
QString getPicsPath() const { return picsPath; }
|
||||
QString getCardDatabasePath() const { return cardDatabasePath; }
|
||||
QString getTokenDatabasePath() const { return tokenDatabasePath; }
|
||||
QString getHandBgPath() const { return handBgPath; }
|
||||
QString getStackBgPath() const { return stackBgPath; }
|
||||
QString getTableBgPath() const { return tableBgPath; }
|
||||
QString getPlayerBgPath() const { return playerBgPath; }
|
||||
QString getCardBackPicturePath() const { return cardBackPicturePath; }
|
||||
QString getThemeName() const { return themeName; }
|
||||
QString getChatMentionColor() const { return chatMentionColor; }
|
||||
bool getPicDownload() const { return picDownload; }
|
||||
bool getPicDownloadHq() const { return picDownloadHq; }
|
||||
|
@ -146,11 +137,7 @@ public slots:
|
|||
void setPicsPath(const QString &_picsPath);
|
||||
void setCardDatabasePath(const QString &_cardDatabasePath);
|
||||
void setTokenDatabasePath(const QString &_tokenDatabasePath);
|
||||
void setHandBgPath(const QString &_handBgPath);
|
||||
void setStackBgPath(const QString &_stackBgPath);
|
||||
void setTableBgPath(const QString &_tableBgPath);
|
||||
void setPlayerBgPath(const QString &_playerBgPath);
|
||||
void setCardBackPicturePath(const QString &_cardBackPicturePath);
|
||||
void setThemeName(const QString &_themeName);
|
||||
void setChatMentionColor(const QString &_chatMentionColor);
|
||||
void setPicDownload(int _picDownload);
|
||||
void setPicDownloadHq(int _picDownloadHq);
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "arrowitem.h"
|
||||
#include "stackzone.h"
|
||||
#include "settingscache.h"
|
||||
#include "thememanager.h"
|
||||
#include "player.h"
|
||||
#include "carddragitem.h"
|
||||
#include "carditem.h"
|
||||
|
@ -12,16 +13,13 @@
|
|||
StackZone::StackZone(Player *_p, int _zoneHeight, QGraphicsItem *parent)
|
||||
: SelectZone(_p, "stack", false, false, true, parent), zoneHeight(_zoneHeight)
|
||||
{
|
||||
connect(settingsCache, SIGNAL(stackBgPathChanged()), this, SLOT(updateBgPixmap()));
|
||||
updateBgPixmap();
|
||||
connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg()));
|
||||
updateBg();
|
||||
setCacheMode(DeviceCoordinateCache);
|
||||
}
|
||||
|
||||
void StackZone::updateBgPixmap()
|
||||
void StackZone::updateBg()
|
||||
{
|
||||
QString bgPath = settingsCache->getStackBgPath();
|
||||
if (!bgPath.isEmpty())
|
||||
bgPixmap.load(bgPath);
|
||||
update();
|
||||
}
|
||||
|
||||
|
@ -48,10 +46,7 @@ QRectF StackZone::boundingRect() const
|
|||
|
||||
void StackZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
|
||||
{
|
||||
if (bgPixmap.isNull())
|
||||
painter->fillRect(boundingRect(), QColor(113, 43, 43));
|
||||
else
|
||||
painter->fillRect(boundingRect(), QBrush(bgPixmap));
|
||||
painter->fillRect(boundingRect(), themeManager->getStackBgBrush());
|
||||
}
|
||||
|
||||
void StackZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &/*dropPoint*/)
|
||||
|
|
|
@ -7,9 +7,8 @@ class StackZone : public SelectZone {
|
|||
Q_OBJECT
|
||||
private:
|
||||
qreal zoneHeight;
|
||||
QPixmap bgPixmap;
|
||||
private slots:
|
||||
void updateBgPixmap();
|
||||
void updateBg();
|
||||
public:
|
||||
StackZone(Player *_p, int _zoneHeight, QGraphicsItem *parent = 0);
|
||||
void handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &dropPoint);
|
||||
|
|
|
@ -51,16 +51,16 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
|
|||
: Tab(_tabSupervisor, parent), modified(false)
|
||||
{
|
||||
aClearFilterAll = new QAction(QString(), this);
|
||||
aClearFilterAll->setIcon(QIcon(":/resources/icon_clearsearch.svg"));
|
||||
aClearFilterAll->setIcon(QIcon("theme:icon_clearsearch.svg"));
|
||||
connect(aClearFilterAll, SIGNAL(triggered()), this, SLOT(actClearFilterAll()));
|
||||
|
||||
aClearFilterOne = new QAction(QString(), this);
|
||||
aClearFilterOne->setIcon(QIcon(":/resources/decrement.svg"));
|
||||
aClearFilterOne->setIcon(QIcon("theme:decrement.svg"));
|
||||
connect(aClearFilterOne, SIGNAL(triggered()), this, SLOT(actClearFilterOne()));
|
||||
|
||||
searchEdit = new SearchLineEdit;
|
||||
#if QT_VERSION >= 0x050300
|
||||
searchEdit->addAction(QIcon(":/resources/icon_search_black.svg"), QLineEdit::LeadingPosition);
|
||||
searchEdit->addAction(QIcon("theme:icon_search_black.svg"), QLineEdit::LeadingPosition);
|
||||
#endif
|
||||
searchEdit->setObjectName("searchEdit");
|
||||
|
||||
|
@ -193,7 +193,7 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
|
|||
|
||||
/* Update price
|
||||
aUpdatePrices = new QAction(QString(), this);
|
||||
aUpdatePrices->setIcon(QIcon(":/resources/icon_update.png"));
|
||||
aUpdatePrices->setIcon(QIcon("theme:icon_update.png"));
|
||||
connect(aUpdatePrices, SIGNAL(triggered()), this, SLOT(actUpdatePrices()));
|
||||
if (!settingsCache->getPriceTagFeature())
|
||||
aUpdatePrices->setVisible(false);
|
||||
|
@ -282,19 +282,19 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
|
|||
addTabMenu(dbMenu);
|
||||
|
||||
aAddCard = new QAction(QString(), this);
|
||||
aAddCard->setIcon(QIcon(":/resources/arrow_right_green.svg"));
|
||||
aAddCard->setIcon(QIcon("theme:arrow_right_green.svg"));
|
||||
connect(aAddCard, SIGNAL(triggered()), this, SLOT(actAddCard()));
|
||||
aAddCardToSideboard = new QAction(QString(), this);
|
||||
aAddCardToSideboard->setIcon(QIcon(":/resources/add_to_sideboard.svg"));
|
||||
aAddCardToSideboard->setIcon(QIcon("theme:add_to_sideboard.svg"));
|
||||
connect(aAddCardToSideboard, SIGNAL(triggered()), this, SLOT(actAddCardToSideboard()));
|
||||
aRemoveCard = new QAction(QString(), this);
|
||||
aRemoveCard->setIcon(QIcon(":/resources/remove_row.svg"));
|
||||
aRemoveCard->setIcon(QIcon("theme:remove_row.svg"));
|
||||
connect(aRemoveCard, SIGNAL(triggered()), this, SLOT(actRemoveCard()));
|
||||
aIncrement = new QAction(QString(), this);
|
||||
aIncrement->setIcon(QIcon(":/resources/increment.svg"));
|
||||
aIncrement->setIcon(QIcon("theme:increment.svg"));
|
||||
connect(aIncrement, SIGNAL(triggered()), this, SLOT(actIncrement()));
|
||||
aDecrement = new QAction(QString(), this);
|
||||
aDecrement->setIcon(QIcon(":/resources/decrement.svg"));
|
||||
aDecrement->setIcon(QIcon("theme:decrement.svg"));
|
||||
connect(aDecrement, SIGNAL(triggered()), this, SLOT(actDecrement()));
|
||||
|
||||
deckEditToolBar->addAction(aAddCard);
|
||||
|
|
|
@ -80,25 +80,25 @@ TabDeckStorage::TabDeckStorage(TabSupervisor *_tabSupervisor, AbstractClient *_c
|
|||
hbox->addWidget(rightGroupBox);
|
||||
|
||||
aOpenLocalDeck = new QAction(this);
|
||||
aOpenLocalDeck->setIcon(QIcon(":/resources/pencil.svg"));
|
||||
aOpenLocalDeck->setIcon(QIcon("theme:pencil.svg"));
|
||||
connect(aOpenLocalDeck, SIGNAL(triggered()), this, SLOT(actOpenLocalDeck()));
|
||||
aUpload = new QAction(this);
|
||||
aUpload->setIcon(QIcon(":/resources/arrow_right_green.svg"));
|
||||
aUpload->setIcon(QIcon("theme:arrow_right_green.svg"));
|
||||
connect(aUpload, SIGNAL(triggered()), this, SLOT(actUpload()));
|
||||
aDeleteLocalDeck = new QAction(this);
|
||||
aDeleteLocalDeck->setIcon(QIcon(":/resources/remove_row.svg"));
|
||||
aDeleteLocalDeck->setIcon(QIcon("theme:remove_row.svg"));
|
||||
connect(aDeleteLocalDeck, SIGNAL(triggered()), this, SLOT(actDeleteLocalDeck()));
|
||||
aOpenRemoteDeck = new QAction(this);
|
||||
aOpenRemoteDeck->setIcon(QIcon(":/resources/pencil.svg"));
|
||||
aOpenRemoteDeck->setIcon(QIcon("theme:pencil.svg"));
|
||||
connect(aOpenRemoteDeck, SIGNAL(triggered()), this, SLOT(actOpenRemoteDeck()));
|
||||
aDownload = new QAction(this);
|
||||
aDownload->setIcon(QIcon(":/resources/arrow_left_green.svg"));
|
||||
aDownload->setIcon(QIcon("theme:arrow_left_green.svg"));
|
||||
connect(aDownload, SIGNAL(triggered()), this, SLOT(actDownload()));
|
||||
aNewFolder = new QAction(this);
|
||||
aNewFolder->setIcon(qApp->style()->standardIcon(QStyle::SP_FileDialogNewFolder));
|
||||
connect(aNewFolder, SIGNAL(triggered()), this, SLOT(actNewFolder()));
|
||||
aDeleteRemoteDeck = new QAction(this);
|
||||
aDeleteRemoteDeck->setIcon(QIcon(":/resources/remove_row.svg"));
|
||||
aDeleteRemoteDeck->setIcon(QIcon("theme:remove_row.svg"));
|
||||
connect(aDeleteRemoteDeck, SIGNAL(triggered()), this, SLOT(actDeleteRemoteDeck()));
|
||||
|
||||
leftToolBar->addAction(aOpenLocalDeck);
|
||||
|
|
|
@ -305,17 +305,17 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay)
|
|||
|
||||
replayStartButton = new QToolButton;
|
||||
replayStartButton->setIconSize(QSize(32, 32));
|
||||
replayStartButton->setIcon(QIcon(":/resources/replay_start.svg"));
|
||||
replayStartButton->setIcon(QIcon("theme:replay_start.svg"));
|
||||
connect(replayStartButton, SIGNAL(clicked()), this, SLOT(replayStartButtonClicked()));
|
||||
replayPauseButton = new QToolButton;
|
||||
replayPauseButton->setIconSize(QSize(32, 32));
|
||||
replayPauseButton->setEnabled(false);
|
||||
replayPauseButton->setIcon(QIcon(":/resources/replay_pause.svg"));
|
||||
replayPauseButton->setIcon(QIcon("theme:replay_pause.svg"));
|
||||
connect(replayPauseButton, SIGNAL(clicked()), this, SLOT(replayPauseButtonClicked()));
|
||||
replayFastForwardButton = new QToolButton;
|
||||
replayFastForwardButton->setIconSize(QSize(32, 32));
|
||||
replayFastForwardButton->setEnabled(false);
|
||||
replayFastForwardButton->setIcon(QIcon(":/resources/replay_fastforward.svg"));
|
||||
replayFastForwardButton->setIcon(QIcon("theme:replay_fastforward.svg"));
|
||||
replayFastForwardButton->setCheckable(true);
|
||||
connect(replayFastForwardButton, SIGNAL(toggled(bool)), this, SLOT(replayFastForwardButtonToggled(bool)));
|
||||
|
||||
|
|
|
@ -78,22 +78,22 @@ TabReplays::TabReplays(TabSupervisor *_tabSupervisor, AbstractClient *_client)
|
|||
hbox->addWidget(rightGroupBox);
|
||||
|
||||
aOpenLocalReplay = new QAction(this);
|
||||
aOpenLocalReplay->setIcon(QIcon(":/resources/icon_view.svg"));
|
||||
aOpenLocalReplay->setIcon(QIcon("theme:icon_view.svg"));
|
||||
connect(aOpenLocalReplay, SIGNAL(triggered()), this, SLOT(actOpenLocalReplay()));
|
||||
aDeleteLocalReplay = new QAction(this);
|
||||
aDeleteLocalReplay->setIcon(QIcon(":/resources/remove_row.svg"));
|
||||
aDeleteLocalReplay->setIcon(QIcon("theme:remove_row.svg"));
|
||||
connect(aDeleteLocalReplay, SIGNAL(triggered()), this, SLOT(actDeleteLocalReplay()));
|
||||
aOpenRemoteReplay = new QAction(this);
|
||||
aOpenRemoteReplay->setIcon(QIcon(":/resources/icon_view.svg"));
|
||||
aOpenRemoteReplay->setIcon(QIcon("theme:icon_view.svg"));
|
||||
connect(aOpenRemoteReplay, SIGNAL(triggered()), this, SLOT(actOpenRemoteReplay()));
|
||||
aDownload = new QAction(this);
|
||||
aDownload->setIcon(QIcon(":/resources/arrow_left_green.svg"));
|
||||
aDownload->setIcon(QIcon("theme:arrow_left_green.svg"));
|
||||
connect(aDownload, SIGNAL(triggered()), this, SLOT(actDownload()));
|
||||
aKeep = new QAction(this);
|
||||
aKeep->setIcon(QIcon(":/resources/lock.svg"));
|
||||
aKeep->setIcon(QIcon("theme:lock.svg"));
|
||||
connect(aKeep, SIGNAL(triggered()), this, SLOT(actKeepRemoteReplay()));
|
||||
aDeleteRemoteReplay = new QAction(this);
|
||||
aDeleteRemoteReplay->setIcon(QIcon(":/resources/remove_row.svg"));
|
||||
aDeleteRemoteReplay->setIcon(QIcon("theme:remove_row.svg"));
|
||||
connect(aDeleteRemoteReplay, SIGNAL(triggered()), this, SLOT(actDeleteRemoteReplay()));
|
||||
|
||||
leftToolBar->addAction(aOpenLocalReplay);
|
||||
|
|
|
@ -68,7 +68,7 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerI
|
|||
connect(aOpenChatSettings, SIGNAL(triggered()), this, SLOT(actOpenChatSettings()));
|
||||
|
||||
QToolButton *chatSettingsButton = new QToolButton;
|
||||
chatSettingsButton->setIcon(QIcon(":/resources/icon_settings.svg"));
|
||||
chatSettingsButton->setIcon(QIcon("theme:icon_settings.svg"));
|
||||
chatSettingsButton->setMenu(chatSettingsMenu);
|
||||
chatSettingsButton->setPopupMode(QToolButton::InstantPopup);
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ void CloseButton::paintEvent(QPaintEvent * /*event*/)
|
|||
TabSupervisor::TabSupervisor(AbstractClient *_client, QWidget *parent)
|
||||
: QTabWidget(parent), userInfo(0), client(_client), tabServer(0), tabUserLists(0), tabDeckStorage(0), tabReplays(0), tabAdmin(0)
|
||||
{
|
||||
tabChangedIcon = new QIcon(":/resources/icon_tab_changed.svg");
|
||||
tabChangedIcon = new QIcon("theme:icon_tab_changed.svg");
|
||||
setElideMode(Qt::ElideRight);
|
||||
setMovable(true);
|
||||
setIconSize(QSize(15, 15));
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "tablezone.h"
|
||||
#include "player.h"
|
||||
#include "settingscache.h"
|
||||
#include "thememanager.h"
|
||||
#include "arrowitem.h"
|
||||
#include "carddragitem.h"
|
||||
#include "carddatabase.h"
|
||||
|
@ -16,20 +17,18 @@
|
|||
#include "pb/command_move_card.pb.h"
|
||||
#include "pb/command_set_card_attr.pb.h"
|
||||
|
||||
|
||||
const QColor TableZone::BACKGROUND_COLOR = QColor(100, 100, 100);
|
||||
const QColor TableZone::FADE_MASK = QColor(0, 0, 0, 80);
|
||||
const QColor TableZone::GRADIENT_COLOR = QColor(255, 255, 255, 150);
|
||||
const QColor TableZone::GRADIENT_COLORLESS = QColor(255, 255, 255, 0);
|
||||
|
||||
|
||||
TableZone::TableZone(Player *_p, QGraphicsItem *parent)
|
||||
: SelectZone(_p, "table", true, false, true, parent), active(false)
|
||||
{
|
||||
connect(settingsCache, SIGNAL(tableBgPathChanged()), this, SLOT(updateBgPixmap()));
|
||||
connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg()));
|
||||
connect(settingsCache, SIGNAL(invertVerticalCoordinateChanged()), this, SLOT(reorganizeCards()));
|
||||
|
||||
updateBgPixmap();
|
||||
updateBg();
|
||||
|
||||
height = 2 * BOX_LINE_WIDTH + 3 * (CARD_HEIGHT + 20) + 2 * PADDING_Y;
|
||||
width = MIN_WIDTH + 2 * MARGIN_X + 2 * BOX_LINE_WIDTH;
|
||||
|
@ -44,11 +43,8 @@ TableZone::TableZone(Player *_p, QGraphicsItem *parent)
|
|||
}
|
||||
|
||||
|
||||
void TableZone::updateBgPixmap()
|
||||
void TableZone::updateBg()
|
||||
{
|
||||
QString bgPath = settingsCache->getTableBgPath();
|
||||
if (!bgPath.isEmpty())
|
||||
backgroundPixelMap.load(bgPath);
|
||||
update();
|
||||
}
|
||||
|
||||
|
@ -67,11 +63,7 @@ bool TableZone::isInverted() const
|
|||
|
||||
void TableZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
|
||||
{
|
||||
// if no custom background is provided then use the default color
|
||||
if (backgroundPixelMap.isNull())
|
||||
painter->fillRect(boundingRect(), BACKGROUND_COLOR);
|
||||
else
|
||||
painter->fillRect(boundingRect(), QBrush(backgroundPixelMap));
|
||||
painter->fillRect(boundingRect(), themeManager->getTableBgBrush());
|
||||
|
||||
if (active) {
|
||||
paintZoneOutline(painter);
|
||||
|
|
|
@ -27,7 +27,7 @@ private:
|
|||
static const int MIN_WIDTH = 15 * CARD_WIDTH / 2;
|
||||
|
||||
/*
|
||||
Default background color, inactive mask and boarder gradient
|
||||
Default inactive mask and border gradient
|
||||
*/
|
||||
static const QColor BACKGROUND_COLOR;
|
||||
static const QColor FADE_MASK;
|
||||
|
@ -42,11 +42,6 @@ private:
|
|||
int height;
|
||||
int currentMinimumWidth;
|
||||
|
||||
/*
|
||||
Holds any custom background image for the TableZone
|
||||
*/
|
||||
QPixmap backgroundPixelMap;
|
||||
|
||||
/*
|
||||
If this TableZone is currently active
|
||||
*/
|
||||
|
@ -58,7 +53,7 @@ private slots:
|
|||
/**
|
||||
Loads in any found custom background and updates
|
||||
*/
|
||||
void updateBgPixmap();
|
||||
void updateBg();
|
||||
|
||||
public slots:
|
||||
/**
|
||||
|
|
144
cockatrice/src/thememanager.cpp
Normal file
|
@ -0,0 +1,144 @@
|
|||
#include "thememanager.h"
|
||||
#include "settingscache.h"
|
||||
#include <QApplication>
|
||||
#include <QDebug>
|
||||
#include <QColor>
|
||||
#include <QLibraryInfo>
|
||||
#if QT_VERSION < 0x050000
|
||||
#include <QDesktopServices>
|
||||
#else
|
||||
#include <QStandardPaths>
|
||||
#endif
|
||||
|
||||
#define DEFAULT_THEME_NAME "Default"
|
||||
#define STYLE_CSS_NAME "style.css"
|
||||
#define HANDZONE_BG_NAME "handzone"
|
||||
#define PLAYERZONE_BG_NAME "playerzone"
|
||||
#define STACKZONE_BG_NAME "stackzone"
|
||||
#define TABLEZONE_BG_NAME "tablezone"
|
||||
#define CARD_BACK_NAME "cardback"
|
||||
|
||||
ThemeManager::ThemeManager(QObject *parent)
|
||||
:QObject(parent)
|
||||
{
|
||||
ensureThemeDirectoryExists();
|
||||
connect(settingsCache, SIGNAL(themeChanged()), this, SLOT(themeChangedSlot()));
|
||||
themeChangedSlot();
|
||||
}
|
||||
|
||||
void ThemeManager::ensureThemeDirectoryExists()
|
||||
{
|
||||
if(settingsCache->getThemeName().isEmpty() ||
|
||||
!getAvailableThemes().contains(settingsCache->getThemeName()))
|
||||
{
|
||||
qDebug() << "Theme name not set, setting default value";
|
||||
settingsCache->setThemeName(DEFAULT_THEME_NAME);
|
||||
}
|
||||
}
|
||||
|
||||
QStringMap & ThemeManager::getAvailableThemes()
|
||||
{
|
||||
QDir dir;
|
||||
availableThemes.clear();
|
||||
|
||||
// load themes from user profile dir
|
||||
dir =
|
||||
#if QT_VERSION < 0x050000
|
||||
QDesktopServices::storageLocation(QDesktopServices::DataLocation) +
|
||||
#else
|
||||
QStandardPaths::standardLocations(QStandardPaths::DataLocation).first() +
|
||||
#endif
|
||||
"/themes";
|
||||
|
||||
foreach(QString themeName, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot, QDir::Name))
|
||||
{
|
||||
if(!availableThemes.contains(themeName))
|
||||
availableThemes.insert(themeName, dir.absoluteFilePath(themeName));
|
||||
}
|
||||
|
||||
// load themes from cockatrice system dir
|
||||
#ifdef Q_OS_MAC
|
||||
dir = qApp->applicationDirPath() + "/../Resources/themes";
|
||||
#elif defined(Q_OS_WIN)
|
||||
dir = qApp->applicationDirPath() + "/themes";
|
||||
#else // linux
|
||||
dir = qApp->applicationDirPath() + "/../share/cockatrice/themes";
|
||||
#endif
|
||||
foreach(QString themeName, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot, QDir::Name))
|
||||
{
|
||||
if(!availableThemes.contains(themeName))
|
||||
availableThemes.insert(themeName, dir.absoluteFilePath(themeName));
|
||||
}
|
||||
|
||||
return availableThemes;
|
||||
}
|
||||
|
||||
QBrush ThemeManager::loadBrush(QDir dir, QString fileName, QColor fallbackColor)
|
||||
{
|
||||
QBrush brush;
|
||||
QPixmap tmp;
|
||||
QStringList exts;
|
||||
exts << ".png" << ".jpg" << ".jpeg" << ".gif" << ".bmp";
|
||||
|
||||
brush.setColor(fallbackColor);
|
||||
brush.setStyle(Qt::SolidPattern);
|
||||
|
||||
foreach (const QString &ext, exts) {
|
||||
if (dir.exists(fileName + ext)) {
|
||||
tmp.load(dir.absoluteFilePath(fileName + ext));
|
||||
if(!tmp.isNull())
|
||||
brush.setTexture(tmp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return brush;
|
||||
}
|
||||
|
||||
QPixmap ThemeManager::loadPixmap(QDir dir, QString fileName)
|
||||
{
|
||||
QPixmap pix;
|
||||
QStringList exts;
|
||||
exts << ".png" << ".jpg" << ".jpeg" << ".gif" << ".bmp";
|
||||
|
||||
foreach (const QString &ext, exts) {
|
||||
if (dir.exists(fileName + ext)) {
|
||||
pix.load(dir.absoluteFilePath(fileName + ext));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return pix;
|
||||
}
|
||||
|
||||
void ThemeManager::themeChangedSlot()
|
||||
{
|
||||
QString themeName = settingsCache->getThemeName();
|
||||
qDebug() << "Theme changed:" << themeName;
|
||||
|
||||
QDir dir = getAvailableThemes().value(themeName);
|
||||
|
||||
// css
|
||||
if(dir.exists(STYLE_CSS_NAME))
|
||||
|
||||
qApp->setStyleSheet("file:///" + dir.absoluteFilePath(STYLE_CSS_NAME));
|
||||
else
|
||||
qApp->setStyleSheet("");
|
||||
|
||||
// card background
|
||||
cardBackPixmap = loadPixmap(dir, CARD_BACK_NAME);
|
||||
|
||||
// zones bg
|
||||
dir.cd("zones");
|
||||
handBgBrush = loadBrush(dir, HANDZONE_BG_NAME, QColor(80, 100, 50));
|
||||
tableBgBrush = loadBrush(dir, TABLEZONE_BG_NAME, QColor(70, 50, 100));
|
||||
playerBgBrush = loadBrush(dir, PLAYERZONE_BG_NAME, QColor(200, 200, 200));
|
||||
stackBgBrush = loadBrush(dir, STACKZONE_BG_NAME, QColor(113, 43, 43));
|
||||
|
||||
// resources
|
||||
QStringList resources;
|
||||
resources << dir.absolutePath() << ":/resources";
|
||||
QDir::setSearchPaths("theme", resources);
|
||||
|
||||
emit themeChanged();
|
||||
}
|
42
cockatrice/src/thememanager.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
#ifndef THEMEMANAGER_H
|
||||
#define THEMEMANAGER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QBrush>
|
||||
#include <QPixmap>
|
||||
#include <QMap>
|
||||
#include <QDir>
|
||||
#include <QString>
|
||||
|
||||
typedef QMap<QString, QString> QStringMap;
|
||||
|
||||
class QApplication;
|
||||
|
||||
class ThemeManager : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
ThemeManager(QObject *parent = 0);
|
||||
private:
|
||||
QBrush handBgBrush, stackBgBrush, tableBgBrush, playerBgBrush;
|
||||
QPixmap cardBackPixmap;
|
||||
QStringMap availableThemes;
|
||||
protected:
|
||||
void ensureThemeDirectoryExists();
|
||||
QBrush loadBrush(QDir dir, QString fileName, QColor fallbackColor);
|
||||
QPixmap loadPixmap(QDir dir, QString fileName);
|
||||
public:
|
||||
QBrush &getHandBgBrush() { return handBgBrush; }
|
||||
QBrush &getStackBgBrush() { return stackBgBrush; }
|
||||
QBrush &getTableBgBrush() { return tableBgBrush; }
|
||||
QBrush &getPlayerBgBrush() { return playerBgBrush; }
|
||||
QPixmap &getCardBackPixmap() { return cardBackPixmap; }
|
||||
QStringMap &getAvailableThemes();
|
||||
protected slots:
|
||||
void themeChangedSlot();
|
||||
signals:
|
||||
void themeChanged();
|
||||
};
|
||||
|
||||
extern ThemeManager * themeManager;
|
||||
|
||||
#endif
|
|
@ -561,7 +561,7 @@ void MainWindow::createTrayIcon() {
|
|||
|
||||
trayIcon = new QSystemTrayIcon(this);
|
||||
trayIcon->setContextMenu(trayIconMenu);
|
||||
trayIcon->setIcon(QIcon(":/resources/appicon.svg"));
|
||||
trayIcon->setIcon(QIcon("theme:appicon.svg"));
|
||||
trayIcon->show();
|
||||
|
||||
connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,
|
||||
|
|
|
@ -24,28 +24,28 @@ WndSets::WndSets(QWidget *parent)
|
|||
setsEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
||||
|
||||
aTop = new QAction(QString(), this);
|
||||
aTop->setIcon(QIcon(":/resources/arrow_top_green.svg"));
|
||||
aTop->setIcon(QIcon("theme:arrow_top_green.svg"));
|
||||
aTop->setToolTip(tr("Move selected set to the top"));
|
||||
aTop->setEnabled(false);
|
||||
connect(aTop, SIGNAL(triggered()), this, SLOT(actTop()));
|
||||
setsEditToolBar->addAction(aTop);
|
||||
|
||||
aUp = new QAction(QString(), this);
|
||||
aUp->setIcon(QIcon(":/resources/arrow_up_green.svg"));
|
||||
aUp->setIcon(QIcon("theme:arrow_up_green.svg"));
|
||||
aUp->setToolTip(tr("Move selected set up"));
|
||||
aUp->setEnabled(false);
|
||||
connect(aUp, SIGNAL(triggered()), this, SLOT(actUp()));
|
||||
setsEditToolBar->addAction(aUp);
|
||||
|
||||
aDown = new QAction(QString(), this);
|
||||
aDown->setIcon(QIcon(":/resources/arrow_down_green.svg"));
|
||||
aDown->setIcon(QIcon("theme:arrow_down_green.svg"));
|
||||
aDown->setToolTip(tr("Move selected set down"));
|
||||
aDown->setEnabled(false);
|
||||
connect(aDown, SIGNAL(triggered()), this, SLOT(actDown()));
|
||||
setsEditToolBar->addAction(aDown);
|
||||
|
||||
aBottom = new QAction(QString(), this);
|
||||
aBottom->setIcon(QIcon(":/resources/arrow_bottom_green.svg"));
|
||||
aBottom->setIcon(QIcon("theme:arrow_bottom_green.svg"));
|
||||
aBottom->setToolTip(tr("Move selected set to the bottom"));
|
||||
aBottom->setEnabled(false);
|
||||
connect(aBottom, SIGNAL(triggered()), this, SLOT(actBottom()));
|
||||
|
|
|
@ -250,5 +250,5 @@ void ZoneViewWidget::zoneDeleted()
|
|||
void ZoneViewWidget::initStyleOption(QStyleOption *option) const {
|
||||
QStyleOptionTitleBar *titleBar = qstyleoption_cast<QStyleOptionTitleBar *>(option);
|
||||
if (titleBar)
|
||||
titleBar->icon = QIcon(":/resources/appicon.svg");
|
||||
titleBar->icon = QIcon("theme:appicon.svg");
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ SET(oracle_SOURCES
|
|||
src/oracleimporter.cpp
|
||||
../cockatrice/src/carddatabase.cpp
|
||||
../cockatrice/src/settingscache.cpp
|
||||
../cockatrice/src/thememanager.cpp
|
||||
../cockatrice/src/qt-json/json.cpp
|
||||
)
|
||||
|
||||
|
|
|
@ -7,9 +7,11 @@
|
|||
#include "main.h"
|
||||
#include "oraclewizard.h"
|
||||
#include "settingscache.h"
|
||||
#include "thememanager.h"
|
||||
|
||||
QTranslator *translator, *qtTranslator;
|
||||
SettingsCache *settingsCache;
|
||||
ThemeManager *themeManager;
|
||||
|
||||
const QString translationPrefix = "oracle";
|
||||
#ifdef TRANSLATION_PATH
|
||||
|
@ -51,6 +53,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
settingsCache = new SettingsCache;
|
||||
themeManager = new ThemeManager;
|
||||
|
||||
qtTranslator = new QTranslator;
|
||||
translator = new QTranslator;
|
||||
|
|
22
themes/CMakeLists.txt
Normal file
|
@ -0,0 +1,22 @@
|
|||
# CMakeLists for themes directory
|
||||
#
|
||||
# add themes subfolders
|
||||
|
||||
SET(defthemes
|
||||
Default
|
||||
Fabric
|
||||
Leather
|
||||
Plasma
|
||||
VelvetMarble
|
||||
)
|
||||
|
||||
if(UNIX)
|
||||
if(APPLE)
|
||||
INSTALL(DIRECTORY ${defthemes} DESTINATION cockatrice.app/Contents/Resources/themes/)
|
||||
else()
|
||||
# Assume linux
|
||||
INSTALL(DIRECTORY ${defthemes} DESTINATION share/cockatrice/themes/)
|
||||
endif()
|
||||
elseif(WIN32)
|
||||
INSTALL(DIRECTORY ${defthemes} DESTINATION themes/)
|
||||
endif()
|
1
themes/Default/version.txt
Normal file
|
@ -0,0 +1 @@
|
|||
0
|
1
themes/Fabric/version.txt
Normal file
|
@ -0,0 +1 @@
|
|||
0
|
Before Width: | Height: | Size: 313 KiB After Width: | Height: | Size: 313 KiB |
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 147 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 154 KiB |
Before Width: | Height: | Size: 257 KiB After Width: | Height: | Size: 257 KiB |
1
themes/Leather/version.txt
Normal file
|
@ -0,0 +1 @@
|
|||
0
|
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 151 KiB |
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 174 KiB |
1
themes/Plasma/version.txt
Normal file
|
@ -0,0 +1 @@
|
|||
0
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
1
themes/VelvetMarble/version.txt
Normal file
|
@ -0,0 +1 @@
|
|||
0
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
@ -1,16 +0,0 @@
|
|||
# CMakeLists for zonebg/ directory
|
||||
#
|
||||
# Installs default "zone background" files
|
||||
|
||||
FILE(GLOB zonebg "${CMAKE_CURRENT_SOURCE_DIR}/*.png" "${CMAKE_CURRENT_SOURCE_DIR}/*.jpg")
|
||||
|
||||
if(UNIX)
|
||||
if(APPLE)
|
||||
INSTALL(FILES ${zonebg} DESTINATION cockatrice.app/Contents/Resources/zonebg/)
|
||||
else()
|
||||
# Assume linux
|
||||
INSTALL(FILES ${zonebg} DESTINATION share/cockatrice/zonebg/)
|
||||
endif()
|
||||
elseif(WIN32)
|
||||
INSTALL(FILES ${zonebg} DESTINATION zonebg/)
|
||||
endif()
|
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 37 KiB |