From da05707b265ff1c1669d4f7ae76c503b105f054c Mon Sep 17 00:00:00 2001 From: doitux Date: Mon, 30 Mar 2009 13:12:44 +0000 Subject: [PATCH] next steps skinning implementation (config ready) --- data/gfx/cards/default/defaultcarddeck.xml | 7 - data/gfx/cards/default/defaultdeckstyle.xml | 8 + data/gfx/cards/default/preview.png | Bin 0 -> 28469 bytes pokerth_game.pro | 2 + src/config/configfile.cpp | 6 +- src/gui/qt/gametable.ui | 4 +- src/gui/qt/settingsdialog.ui | 12 +- .../qt/settingsdialog/settingsdialogimpl.cpp | 167 ++++++++++++-- .../qt/settingsdialog/settingsdialogimpl.h | 7 +- src/gui/qt/startwindow.ui | 203 +++++++++--------- src/gui/qt/styles/carddeckstylereader.cpp | 82 +++++++ src/gui/qt/styles/carddeckstylereader.h | 58 +++++ src/gui/qt/styles/gametablestylereader.h | 5 +- 13 files changed, 425 insertions(+), 136 deletions(-) delete mode 100644 data/gfx/cards/default/defaultcarddeck.xml create mode 100644 data/gfx/cards/default/defaultdeckstyle.xml create mode 100644 data/gfx/cards/default/preview.png create mode 100644 src/gui/qt/styles/carddeckstylereader.cpp create mode 100644 src/gui/qt/styles/carddeckstylereader.h diff --git a/data/gfx/cards/default/defaultcarddeck.xml b/data/gfx/cards/default/defaultcarddeck.xml deleted file mode 100644 index c23e6996..00000000 --- a/data/gfx/cards/default/defaultcarddeck.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/data/gfx/cards/default/defaultdeckstyle.xml b/data/gfx/cards/default/defaultdeckstyle.xml new file mode 100644 index 00000000..a5d3d852 --- /dev/null +++ b/data/gfx/cards/default/defaultdeckstyle.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/data/gfx/cards/default/preview.png b/data/gfx/cards/default/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..e4e55941ec9fcd57ea96b4edb70412758332f559 GIT binary patch literal 28469 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 - View + &View @@ -3508,7 +3508,7 @@ - Settings + &Settings diff --git a/src/gui/qt/settingsdialog.ui b/src/gui/qt/settingsdialog.ui index e35e10bb..176cea1c 100644 --- a/src/gui/qt/settingsdialog.ui +++ b/src/gui/qt/settingsdialog.ui @@ -481,13 +481,13 @@ p, li { white-space: pre-wrap; } - Card Decks + Card Deck Styles - + Activate @@ -507,14 +507,14 @@ p, li { white-space: pre-wrap; } - + Add ... - + Remove @@ -529,7 +529,7 @@ p, li { white-space: pre-wrap; } - + 160 @@ -551,7 +551,7 @@ p, li { white-space: pre-wrap; } - + diff --git a/src/gui/qt/settingsdialog/settingsdialogimpl.cpp b/src/gui/qt/settingsdialog/settingsdialogimpl.cpp index ea6122f9..7a2a4028 100644 --- a/src/gui/qt/settingsdialog/settingsdialogimpl.cpp +++ b/src/gui/qt/settingsdialog/settingsdialogimpl.cpp @@ -20,11 +20,13 @@ #include "settingsdialogimpl.h" #include "myavatarlistitem.h" #include "gametablestylereader.h" +#include "carddeckstylereader.h" #include "configfile.h" #include #define POKERTH_DISTRIBUTED_GAME_TABLE_STYLES 1 +#define POKERTH_DISTRIBUTED_CARD_DECK_STYLES 1 using namespace std; @@ -110,8 +112,10 @@ settingsDialogImpl::settingsDialogImpl(QWidget *parent, ConfigFile *c, selectAva connect( pushButton_addGameTableStyle, SIGNAL( clicked() ), this, SLOT( addGameTableStyle()) ); connect( pushButton_removeGameTableStyle, SIGNAL( clicked() ), this, SLOT( removeGameTableStyle()) ); - - + connect( listWidget_cardDeckStyles, SIGNAL( currentItemChanged(QListWidgetItem*, QListWidgetItem*) ), this, SLOT ( showCurrentCardDeckStylePreview() )); + connect( pushButton_activateCardDeckStyle, SIGNAL( clicked() ), this, SLOT( setSelectedCardDeckStyleActivated()) ); + connect( pushButton_addCardDeckStyle, SIGNAL( clicked() ), this, SLOT( addCardDeckStyle()) ); + connect( pushButton_removeCardDeckStyle, SIGNAL( clicked() ), this, SLOT( removeCardDeckStyle()) ); } void settingsDialogImpl::exec() { @@ -235,13 +239,14 @@ void settingsDialogImpl::exec() { lineEdit_OwnFlipsideFilename->setText(QString::fromUtf8(myConfig->readConfigString("FlipsideOwnFile").c_str())); //S t y l e + //TABLE // define PokerTH default GameTableStyle listWidget_gameTableStyles->clear(); - GameTableStyleReader defaultStyle(myConfig); - defaultStyle.readStyleFile(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/table/default/defaulttablestyle.xml"); - QListWidgetItem *defaultItem = new QListWidgetItem(defaultStyle.getStyleDescription(),listWidget_gameTableStyles); - defaultItem->setData(15, QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/table/default/defaulttablestyle.xml"); + GameTableStyleReader defaultTableStyle(myConfig); + defaultTableStyle.readStyleFile(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/table/default/defaulttablestyle.xml"); + QListWidgetItem *defaultTableItem = new QListWidgetItem(defaultTableStyle.getStyleDescription(),listWidget_gameTableStyles); + defaultTableItem->setData(15, QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/table/default/defaulttablestyle.xml"); //load secondary styles into list (if fallback no entry) myGameTableStylesList = myConfig->readConfigStringList("GameTableStylesList"); @@ -260,17 +265,17 @@ void settingsDialogImpl::exec() { GameTableStyleReader currentGameTableStyle(myConfig); currentGameTableStyle.readStyleFile(QString::fromUtf8(myConfig->readConfigString("CurrentGameTableStyle").c_str())); int i; - bool currentFound(FALSE); + bool currentGameTableFound(FALSE); for(i=0; i < listWidget_gameTableStyles->count(); i++) { QListWidgetItem *item = listWidget_gameTableStyles->item(i); if(item->data(15) == currentGameTableStyle.getCurrentFileName()) { item->setIcon(QIcon(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/misc/rating.png")); listWidget_gameTableStyles->setCurrentItem(item); - currentFound=TRUE; + currentGameTableFound=TRUE; } else item->setIcon(QIcon()); } - if(!currentFound) { + if(!currentGameTableFound) { qDebug() << "Config ERROR: current game table style file not found in List. Mark default as selected."; QListWidgetItem *item = listWidget_gameTableStyles->item(0); item->setIcon(QIcon(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/misc/rating.png")); @@ -279,11 +284,51 @@ void settingsDialogImpl::exec() { //refresh Game Table Style Preview showCurrentGameTableStylePreview(); - + //CARDS //define PokerTH default CardDeck -// defaultCardDeck = myQtToolsInterface->getDataPathStdString(myArgv0)+"gfx/cards/default/defaultcarddeck.xml"; + listWidget_cardDeckStyles->clear(); + CardDeckStyleReader defaultCardStyle(myConfig); + defaultCardStyle.readStyleFile(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/cards/default/defaultdeckstyle.xml"); + QListWidgetItem *defaultCardItem = new QListWidgetItem(defaultCardStyle.getStyleDescription(),listWidget_cardDeckStyles); + defaultCardItem->setData(15, QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/cards/default/defaultdeckstyle.xml"); + //load secondary card styles into list (if fallback no entry) + myCardDeckStylesList = myConfig->readConfigStringList("CardDeckStylesList"); + list::iterator it2; + for(it2= myCardDeckStylesList.begin(); it2 != myCardDeckStylesList.end(); it2++) { + CardDeckStyleReader nextStyle(myConfig); + nextStyle.readStyleFile(QString::fromUtf8(it2->c_str())); + if(!nextStyle.getFallBack()) { + QListWidgetItem *nextItem = new QListWidgetItem(nextStyle.getStyleDescription()); + nextItem->setData(15,QString::fromUtf8(it2->c_str())); + listWidget_cardDeckStyles->addItem(nextItem); + } + } + + //set current card deck style from config file + CardDeckStyleReader currentCardDeckStyle(myConfig); + currentCardDeckStyle.readStyleFile(QString::fromUtf8(myConfig->readConfigString("CurrentCardDeckStyle").c_str())); + int j; + bool currentCardDeckFound(FALSE); + for(j=0; j < listWidget_cardDeckStyles->count(); j++) { + QListWidgetItem *item = listWidget_cardDeckStyles->item(j); + if(item->data(15) == currentCardDeckStyle.getCurrentFileName()) { + item->setIcon(QIcon(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/misc/rating.png")); + listWidget_cardDeckStyles->setCurrentItem(item); + currentCardDeckFound=TRUE; + } + else item->setIcon(QIcon()); + } + if(!currentCardDeckFound) { + qDebug() << "Config ERROR: current card deck style file not found in List. Mark default as selected."; + QListWidgetItem *item = listWidget_cardDeckStyles->item(0); + item->setIcon(QIcon(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/misc/rating.png")); + listWidget_cardDeckStyles->setCurrentItem(item); + } + +// refresh Card Deck Style Preview + showCurrentCardDeckStylePreview(); //Sound groupBox_playSoundEffects->setChecked(myConfig->readConfigInt("PlaySoundEffects")); @@ -469,6 +514,7 @@ void settingsDialogImpl::isAccepted() { } //S T Y L E +// TABLE //save game table styles list myGameTableStylesList.clear(); int i; @@ -483,7 +529,22 @@ void settingsDialogImpl::isAccepted() { if(!item->icon().isNull()) myConfig->writeConfigString("CurrentGameTableStyle", item->data(15).toString().toUtf8().constData()); } - +// CARDS + //save card deck styles list + myCardDeckStylesList.clear(); + int j; + for(j=POKERTH_DISTRIBUTED_CARD_DECK_STYLES; j < listWidget_cardDeckStyles->count(); j++) { + QListWidgetItem *item = listWidget_cardDeckStyles->item(j); + myCardDeckStylesList.push_back(item->data(15).toString().toUtf8().constData()); + } + myConfig->writeConfigStringList("CardDeckStylesList", myCardDeckStylesList); + //save current card deck style + for(j=0; j < listWidget_cardDeckStyles->count(); j++) { + QListWidgetItem *item = listWidget_cardDeckStyles->item(j); + if(!item->icon().isNull()) + myConfig->writeConfigString("CurrentCardDeckStyle", item->data(15).toString().toUtf8().constData()); + } + //Sound myConfig->writeConfigInt("PlaySoundEffects", groupBox_playSoundEffects->isChecked()); myConfig->writeConfigInt("SoundVolume", horizontalSlider_soundVolume->value()); @@ -865,3 +926,85 @@ void settingsDialogImpl::removeGameTableStyle() } } +void settingsDialogImpl::showCurrentCardDeckStylePreview() +{ + QListWidgetItem* item = listWidget_cardDeckStyles->currentItem(); + if(item) { + CardDeckStyleReader style(myConfig); + style.readStyleFile(item->data(15).toString()); + QPixmap preview(style.getPreview()); + if(preview.height() > 160 || preview.width() > 120) label_cardDeckStylePreview->setPixmap(preview.scaled(160,120,Qt::KeepAspectRatio,Qt::SmoothTransformation)); + else label_cardDeckStylePreview->setPixmap(preview); + } +} + +void settingsDialogImpl::setSelectedCardDeckStyleActivated() +{ + QListWidgetItem* selectedItem = listWidget_cardDeckStyles->currentItem(); + if(selectedItem) { + int i; + for(i=0; i < listWidget_cardDeckStyles->count(); i++) { + QListWidgetItem *item = listWidget_cardDeckStyles->item(i); + if(item == selectedItem) { + item->setIcon(QIcon(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/misc/rating.png")); + } + else item->setIcon(QIcon()); + } + } +} + +void settingsDialogImpl::addCardDeckStyle() +{ + QString fileName = QFileDialog::getOpenFileName(this, tr("Please select your card deck style"), + QDir::home().absolutePath(), + tr("PokerTH card deck styles (*.xml)")); + + if (!fileName.isEmpty()) { + + int i; + bool fileNameAlreadyFound(FALSE); + for(i=0; i < listWidget_cardDeckStyles->count(); i++) { + QListWidgetItem *item = listWidget_cardDeckStyles->item(i); + if(item->data(15).toString() == fileName) + fileNameAlreadyFound = TRUE; + } + + if(fileNameAlreadyFound) { + QMessageBox::warning(this, tr("Card Deck Style Error"), + tr("Selected card deck style file is already in the list. \nPlease select another one to add!"), + QMessageBox::Ok); + } + else { + CardDeckStyleReader newStyle(myConfig); + newStyle.readStyleFile(fileName); + if(!newStyle.getFallBack()) { + QListWidgetItem *newItem = new QListWidgetItem(newStyle.getStyleDescription()); + newItem->setData(15,fileName); + listWidget_cardDeckStyles->addItem(newItem); + } + else { + QMessageBox::warning(this, tr("Card Deck Style File Error"), + tr("Could not read card deck style file. \nStyle will not be placed into list!"), + QMessageBox::Ok); + } + } + } +} + +void settingsDialogImpl::removeCardDeckStyle() +{ + //never delete PokerTH defaullt Styles + if(listWidget_cardDeckStyles->currentRow() >= POKERTH_DISTRIBUTED_CARD_DECK_STYLES) { + + QListWidgetItem* selectedItem = listWidget_cardDeckStyles->currentItem(); + if(selectedItem) { + // if selected is activated --> swith activation to first default + if(!selectedItem->icon().isNull()) { + QListWidgetItem* firstItem = listWidget_cardDeckStyles->item(0); + firstItem->setIcon(QIcon(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/misc/rating.png")); + } + //remove from List + listWidget_cardDeckStyles->takeItem(listWidget_cardDeckStyles->currentRow()); + } + } +} diff --git a/src/gui/qt/settingsdialog/settingsdialogimpl.h b/src/gui/qt/settingsdialog/settingsdialogimpl.h index b55cf934..0db1d18b 100644 --- a/src/gui/qt/settingsdialog/settingsdialogimpl.h +++ b/src/gui/qt/settingsdialog/settingsdialogimpl.h @@ -85,6 +85,11 @@ public slots: void addGameTableStyle(); void removeGameTableStyle(); + void setSelectedCardDeckStyleActivated(); + void showCurrentCardDeckStylePreview(); + void addCardDeckStyle(); + void removeCardDeckStyle(); + private: bool playerNickIsChanged; @@ -101,7 +106,7 @@ private: std::list myManualBlindsList; std::list myNetManualBlindsList; std::list myGameTableStylesList; - std::list myCardDecksList; + std::list myCardDeckStylesList; ConfigFile* myConfig; boost::shared_ptr mySelectAvatarDialogImpl; diff --git a/src/gui/qt/startwindow.ui b/src/gui/qt/startwindow.ui index e2c0fded..c5880bbd 100644 --- a/src/gui/qt/startwindow.ui +++ b/src/gui/qt/startwindow.ui @@ -1,7 +1,8 @@ - + + startWindow - - + + 0 0 @@ -9,29 +10,29 @@ 350 - + 450 350 - + 450 350 - + PokerTH 0.6.3 - The Open-Source Texas Holdem Engine - - - + + + - + Qt::Vertical - + 20 95 @@ -39,12 +40,12 @@ - + - + Qt::Horizontal - + 63 20 @@ -52,24 +53,24 @@ - - - + + + 6 - - + + Qt::NoFocus - + &1 Start Local Game - - + + :/gfx/swbuttonlocalgame.png:/gfx/swbuttonlocalgame.png - + 32 32 @@ -78,18 +79,18 @@ - - + + Qt::NoFocus - + &2 Internet Game - - + + :/gfx/swbuttoninternetgame.png:/gfx/swbuttoninternetgame.png - + 32 32 @@ -98,18 +99,18 @@ - - + + Qt::NoFocus - + &3 Create Network Game - - + + :/gfx/swbuttoncreatenetworkgame.png:/gfx/swbuttoncreatenetworkgame.png - + 32 32 @@ -118,18 +119,18 @@ - - + + Qt::NoFocus - + &4 Join Network Game - - + + :/gfx/swbuttonjoinnetworkgame.png:/gfx/swbuttonjoinnetworkgame.png - + 32 32 @@ -139,12 +140,12 @@ - + - + Qt::Horizontal - + 63 20 @@ -152,12 +153,12 @@ - + - + Qt::Vertical - + 20 95 @@ -167,113 +168,113 @@ - - + + 0 0 450 - 23 + 25 - - - PokerTH + + + &PokerTH - - + + Network Game - - + + - - - - - + + + + + - - - Settings + + + &Settings - + - - + + - - - - + + + + :/gfx/swbuttonlocalgame.png:/gfx/swbuttonlocalgame.png - + Start Local Game ... - + Ctrl+N - - - + + + :/gfx/swbuttoninternetgame.png:/gfx/swbuttoninternetgame.png - + Internet Game ... - + Ctrl+I - - + + About PokerTH - - - + + + :/gfx/systemsettings.png:/gfx/systemsettings.png - + Configure PokerTH ... - - - + + + :/gfx/application_exit.png:/gfx/application_exit.png - + Quit - + Ctrl+Q - - - + + + :/gfx/swbuttoncreatenetworkgame.png:/gfx/swbuttoncreatenetworkgame.png - + Create Network Game ... - - - + + + :/gfx/swbuttonjoinnetworkgame.png:/gfx/swbuttonjoinnetworkgame.png - + Join Network Game ... - + @@ -282,11 +283,11 @@ startWindow close() - + -1 -1 - + 221 168 diff --git a/src/gui/qt/styles/carddeckstylereader.cpp b/src/gui/qt/styles/carddeckstylereader.cpp new file mode 100644 index 00000000..cba705ca --- /dev/null +++ b/src/gui/qt/styles/carddeckstylereader.cpp @@ -0,0 +1,82 @@ +/*************************************************************************** + * Copyright (C) 2006 by Felix Hammer * + * f.hammer@web.de * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "carddeckstylereader.h" +#include +#include +#include +#include + + +using namespace std; + +CardDeckStyleReader::CardDeckStyleReader(ConfigFile *c, gameTableImpl *w) : myConfig(c), myW(w), fallBack(0) +{ + +} + + +CardDeckStyleReader::~CardDeckStyleReader() +{ +} + +void CardDeckStyleReader::readStyleFile(QString file) { + + string tinyFileName; + + //if style file failed --> default style fallback + if(QFile(file).exists()) { + currentFileName = QFile(file).fileName(); + tinyFileName = currentFileName.toUtf8().constData(); + } + else { + currentFileName = QFile(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/cards/default/defaultdeckstyle.xml").fileName(); + tinyFileName = currentFileName.toUtf8().constData(); + fallBack = 1; + } + QFileInfo info(currentFileName); + currentFileDir = info.absolutePath(); + + //start reading the file and fill vars + string tempString1(""); + TiXmlDocument doc(tinyFileName); + + if(doc.LoadFile()) { + TiXmlHandle docHandle( &doc ); + + TiXmlElement* itemsList = docHandle.FirstChild( "PokerTH" ).FirstChild( "CardDeck" ).FirstChild().ToElement(); + for( ; itemsList; itemsList=itemsList->NextSiblingElement()) { + const char *tmpStr1 = itemsList->Attribute("value"); + if (tmpStr1) { + tempString1 = tmpStr1; + + if(itemsList->ValueStr() == "StyleDescription") { StyleDescription = QString::fromUtf8(tempString1.c_str()); } + else if (itemsList->ValueStr() == "Preview") { Preview = QString::fromUtf8(tempString1.c_str()); } + } + } + + } + else { qDebug() << "could not load card deck file: " << tinyFileName.c_str(); } +} + +QString CardDeckStyleReader::getPreview() +{ + return QString(currentFileDir+"/"+Preview); +} + diff --git a/src/gui/qt/styles/carddeckstylereader.h b/src/gui/qt/styles/carddeckstylereader.h new file mode 100644 index 00000000..f6f622a6 --- /dev/null +++ b/src/gui/qt/styles/carddeckstylereader.h @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright (C) 2009 by Felix Hammer * + * f.hammer@web.de * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef CARDDECKSTYLEREADER_H +#define CARDDECKSTYLEREADER_H + +#include "tinyxml.h" +#include "gametableimpl.h" +#include "configfile.h" +#include +#include +#include + +class CardDeckStyleReader : public QObject { +Q_OBJECT +public: + CardDeckStyleReader(ConfigFile *c, gameTableImpl *w =0 ); + ~CardDeckStyleReader(); + + void readStyleFile(QString); + + QString getStyleDescription() const { return StyleDescription; } + QString getCurrentFileName() const { return currentFileName; } + QString getPreview(); + + bool getFallBack() const { return fallBack; } + +private: + + QString StyleDescription; + QString Preview; + + QString currentFileName; + QString currentFileDir; + + ConfigFile *myConfig; + gameTableImpl *myW; + + bool fallBack; +}; + +#endif diff --git a/src/gui/qt/styles/gametablestylereader.h b/src/gui/qt/styles/gametablestylereader.h index 998ffb38..a1107a9d 100644 --- a/src/gui/qt/styles/gametablestylereader.h +++ b/src/gui/qt/styles/gametablestylereader.h @@ -41,10 +41,7 @@ public: QString getCurrentFileName() const { return currentFileName; } QString getPreview(); - bool getFallBack() const { return fallBack; } - - - + bool getFallBack() const { return fallBack; } private: