diff --git a/src/gui/qt/settingsdialog.ui b/src/gui/qt/settingsdialog.ui index ad4d6fa4..e35e10bb 100644 --- a/src/gui/qt/settingsdialog.ui +++ b/src/gui/qt/settingsdialog.ui @@ -409,9 +409,9 @@ p, li { white-space: pre-wrap; } - + - Select + Activate @@ -436,7 +436,7 @@ p, li { white-space: pre-wrap; } - + Remove @@ -487,9 +487,9 @@ p, li { white-space: pre-wrap; } - + - Select + Activate @@ -514,7 +514,7 @@ p, li { white-space: pre-wrap; } - + Remove diff --git a/src/gui/qt/settingsdialog/settingsdialogimpl.cpp b/src/gui/qt/settingsdialog/settingsdialogimpl.cpp index da19f754..ea6122f9 100644 --- a/src/gui/qt/settingsdialog/settingsdialogimpl.cpp +++ b/src/gui/qt/settingsdialog/settingsdialogimpl.cpp @@ -24,6 +24,7 @@ #include "configfile.h" #include +#define POKERTH_DISTRIBUTED_GAME_TABLE_STYLES 1 using namespace std; @@ -104,6 +105,13 @@ settingsDialogImpl::settingsDialogImpl(QWidget *parent, ConfigFile *c, selectAva connect(groupBox_automaticServerConfig, SIGNAL(toggled(bool)), this, SLOT(toggleGroupBoxAutomaticServerConfig(bool))); connect(groupBox_manualServerConfig, SIGNAL(toggled(bool)), this, SLOT(toggleGroupBoxManualServerConfig(bool))); + connect( listWidget_gameTableStyles, SIGNAL( currentItemChanged(QListWidgetItem*, QListWidgetItem*) ), this, SLOT ( showCurrentGameTableStylePreview() )); + connect( pushButton_activateGameTableStyle, SIGNAL( clicked() ), this, SLOT( setSelectedGameTableStyleActivated()) ); + connect( pushButton_addGameTableStyle, SIGNAL( clicked() ), this, SLOT( addGameTableStyle()) ); + connect( pushButton_removeGameTableStyle, SIGNAL( clicked() ), this, SLOT( removeGameTableStyle()) ); + + + } void settingsDialogImpl::exec() { @@ -228,21 +236,49 @@ void settingsDialogImpl::exec() { //S t y l e // define PokerTH default GameTableStyle -// 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"); -// defaultItem->setIcon(QIcon(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/misc/rating.png")); - - //load secondary styles into list - + listWidget_gameTableStyles->clear(); - //show selected gametablestyles preview -// QFileInfo info(defaultGameTableStyleFile); -// QPixmap preview(info.absolutePath()+"/"+defaultStyle.getPreview()); -// if(preview.height() > 160 || preview.width() > 120) label_gameTableStylePreview->setPixmap(preview.scaled(160,120,Qt::KeepAspectRatio,Qt::SmoothTransformation)); -// else label_gameTableStylePreview->setPixmap(preview); + 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"); + + //load secondary styles into list (if fallback no entry) + myGameTableStylesList = myConfig->readConfigStringList("GameTableStylesList"); + list::iterator it1; + for(it1= myGameTableStylesList.begin(); it1 != myGameTableStylesList.end(); it1++) { + GameTableStyleReader nextStyle(myConfig); + nextStyle.readStyleFile(QString::fromUtf8(it1->c_str())); + if(!nextStyle.getFallBack()) { + QListWidgetItem *nextItem = new QListWidgetItem(nextStyle.getStyleDescription()); + nextItem->setData(15,QString::fromUtf8(it1->c_str())); + listWidget_gameTableStyles->addItem(nextItem); + } + } + + //set current Game Table Style from config file + GameTableStyleReader currentGameTableStyle(myConfig); + currentGameTableStyle.readStyleFile(QString::fromUtf8(myConfig->readConfigString("CurrentGameTableStyle").c_str())); + int i; + bool currentFound(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; + } + else item->setIcon(QIcon()); + } + if(!currentFound) { + 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")); + listWidget_gameTableStyles->setCurrentItem(item); + } + + //refresh Game Table Style Preview + showCurrentGameTableStylePreview(); //define PokerTH default CardDeck @@ -432,6 +468,22 @@ void settingsDialogImpl::isAccepted() { } } + //S T Y L E + //save game table styles list + myGameTableStylesList.clear(); + int i; + for(i=POKERTH_DISTRIBUTED_GAME_TABLE_STYLES; i < listWidget_gameTableStyles->count(); i++) { + QListWidgetItem *item = listWidget_gameTableStyles->item(i); + myGameTableStylesList.push_back(item->data(15).toString().toUtf8().constData()); + } + myConfig->writeConfigStringList("GameTableStylesList", myGameTableStylesList); + //save current game table style + for(i=0; i < listWidget_gameTableStyles->count(); i++) { + QListWidgetItem *item = listWidget_gameTableStyles->item(i); + if(!item->icon().isNull()) + myConfig->writeConfigString("CurrentGameTableStyle", item->data(15).toString().toUtf8().constData()); + } + //Sound myConfig->writeConfigInt("PlaySoundEffects", groupBox_playSoundEffects->isChecked()); myConfig->writeConfigInt("SoundVolume", horizontalSlider_soundVolume->value()); @@ -730,3 +782,86 @@ void settingsDialogImpl::toggleGroupBoxManualServerConfig(bool toggleState) { else groupBox_automaticServerConfig->setChecked(TRUE); } +void settingsDialogImpl::showCurrentGameTableStylePreview() +{ + QListWidgetItem* item = listWidget_gameTableStyles->currentItem(); + if(item) { + GameTableStyleReader style(myConfig); + style.readStyleFile(item->data(15).toString()); + QPixmap preview(style.getPreview()); + if(preview.height() > 160 || preview.width() > 120) label_gameTableStylePreview->setPixmap(preview.scaled(160,120,Qt::KeepAspectRatio,Qt::SmoothTransformation)); + else label_gameTableStylePreview->setPixmap(preview); + } +} + +void settingsDialogImpl::setSelectedGameTableStyleActivated() +{ + QListWidgetItem* selectedItem = listWidget_gameTableStyles->currentItem(); + if(selectedItem) { + int i; + for(i=0; i < listWidget_gameTableStyles->count(); i++) { + QListWidgetItem *item = listWidget_gameTableStyles->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::addGameTableStyle() +{ + QString fileName = QFileDialog::getOpenFileName(this, tr("Please select your game table style"), + QDir::home().absolutePath(), + tr("PokerTH game table styles (*.xml)")); + + if (!fileName.isEmpty()) { + + int i; + bool fileNameAlreadyFound(FALSE); + for(i=0; i < listWidget_gameTableStyles->count(); i++) { + QListWidgetItem *item = listWidget_gameTableStyles->item(i); + if(item->data(15).toString() == fileName) + fileNameAlreadyFound = TRUE; + } + + if(fileNameAlreadyFound) { + QMessageBox::warning(this, tr("Game Table Style Error"), + tr("Selected game table style file is already in the list. \nPlease select another one to add!"), + QMessageBox::Ok); + } + else { + GameTableStyleReader newStyle(myConfig); + newStyle.readStyleFile(fileName); + if(!newStyle.getFallBack()) { + QListWidgetItem *newItem = new QListWidgetItem(newStyle.getStyleDescription()); + newItem->setData(15,fileName); + listWidget_gameTableStyles->addItem(newItem); + } + else { + QMessageBox::warning(this, tr("Game Table Style File Error"), + tr("Could not read game table style file. \nStyle will not be placed into list!"), + QMessageBox::Ok); + } + } + } +} + +void settingsDialogImpl::removeGameTableStyle() +{ + //never delete PokerTH defaullt Styles + if(listWidget_gameTableStyles->currentRow() >= POKERTH_DISTRIBUTED_GAME_TABLE_STYLES) { + + QListWidgetItem* selectedItem = listWidget_gameTableStyles->currentItem(); + if(selectedItem) { + // if selected is activated --> swith activation to first default + if(!selectedItem->icon().isNull()) { + QListWidgetItem* firstItem = listWidget_gameTableStyles->item(0); + firstItem->setIcon(QIcon(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/misc/rating.png")); + } + //remove from List + listWidget_gameTableStyles->takeItem(listWidget_gameTableStyles->currentRow()); + } + } +} + diff --git a/src/gui/qt/settingsdialog/settingsdialogimpl.h b/src/gui/qt/settingsdialog/settingsdialogimpl.h index 63f138d0..b55cf934 100644 --- a/src/gui/qt/settingsdialog/settingsdialogimpl.h +++ b/src/gui/qt/settingsdialog/settingsdialogimpl.h @@ -79,7 +79,12 @@ public slots: void toggleGroupBoxAutomaticServerConfig(bool /*toggleState*/); void toggleGroupBoxManualServerConfig(bool /*toggleState*/); - + + void setSelectedGameTableStyleActivated(); + void showCurrentGameTableStylePreview(); + void addGameTableStyle(); + void removeGameTableStyle(); + private: bool playerNickIsChanged; @@ -95,6 +100,8 @@ private: int myNetAfterMBAlwaysRaiseValue; std::list myManualBlindsList; std::list myNetManualBlindsList; + std::list myGameTableStylesList; + std::list myCardDecksList; ConfigFile* myConfig; boost::shared_ptr mySelectAvatarDialogImpl; diff --git a/src/gui/qt/styles/gametablestylereader.cpp b/src/gui/qt/styles/gametablestylereader.cpp index 90ec8f41..e7bd6f99 100644 --- a/src/gui/qt/styles/gametablestylereader.cpp +++ b/src/gui/qt/styles/gametablestylereader.cpp @@ -26,7 +26,7 @@ using namespace std; -GameTableStyleReader::GameTableStyleReader(ConfigFile *c, gameTableImpl *w) : myConfig(c), myW(w) +GameTableStyleReader::GameTableStyleReader(ConfigFile *c, gameTableImpl *w) : myConfig(c), myW(w), fallBack(0) { } @@ -40,26 +40,15 @@ void GameTableStyleReader::readStyleFile(QString file) { string tinyFileName; - QMessageBox::warning(myW, tr("FILE"), - file, - QMessageBox::Ok); - //if style file failed --> default style fallback if(QFile(file).exists()) { currentFileName = QFile(file).fileName(); - tinyFileName = currentFileName.toStdString(); - - QMessageBox::warning(myW, tr("WORKS"), - currentFileName, - QMessageBox::Ok); + tinyFileName = currentFileName.toUtf8().constData(); } else { currentFileName = QFile(QString::fromUtf8(myConfig->readConfigString("AppDataDir").c_str())+"/gfx/gui/table/default/defaulttablestyle.xml").fileName(); - tinyFileName = currentFileName.toStdString(); - QMessageBox::warning(myW, tr("FALLBACK"), - currentFileName, - QMessageBox::Ok); - + tinyFileName = currentFileName.toUtf8().constData(); + fallBack = 1; } QFileInfo info(currentFileName); currentFileDir = info.absolutePath(); @@ -170,6 +159,7 @@ void GameTableStyleReader::readStyleFile(QString file) { //if one or more items are wrong or left show detailed error message if(!wrongItems.isEmpty() && myW != 0) showErrorMessage(StyleDescription, wrongItems, StyleMaintainerEMail); } + else { qDebug() << "could not load game table style file: " << tinyFileName.c_str(); } } void GameTableStyleReader::showErrorMessage(QString style, QStringList failedItems, QString email) @@ -181,3 +171,8 @@ void GameTableStyleReader::showErrorMessage(QString style, QStringList failedIte QMessageBox::Ok); } +QString GameTableStyleReader::getPreview() +{ + return QString(currentFileDir+"/"+Preview); +} + diff --git a/src/gui/qt/styles/gametablestylereader.h b/src/gui/qt/styles/gametablestylereader.h index e44ae146..998ffb38 100644 --- a/src/gui/qt/styles/gametablestylereader.h +++ b/src/gui/qt/styles/gametablestylereader.h @@ -38,8 +38,11 @@ public: void showErrorMessage(QString, QStringList, QString); QString getStyleDescription() const { return StyleDescription; } - QString getPreview() const { return Preview; } - + QString getCurrentFileName() const { return currentFileName; } + QString getPreview(); + + bool getFallBack() const { return fallBack; } + @@ -96,6 +99,8 @@ private: ConfigFile *myConfig; gameTableImpl *myW; + + bool fallBack; }; #endif diff --git a/src/gui/qt/stylesheetreader/stylesheetreader.cpp b/src/gui/qt/stylesheetreader/stylesheetreader.cpp deleted file mode 100644 index 1eb644d1..00000000 --- a/src/gui/qt/stylesheetreader/stylesheetreader.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/*************************************************************************** - * 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 "stylesheetreader.h" -#include -#include -#include -#include - - -using namespace std; - -StyleSheetReader::StyleSheetReader(std::string f) : styleSheetFileName(f) -{ - fillBuffer(); -} - - -StyleSheetReader::~StyleSheetReader() -{ -} - -void StyleSheetReader::fillBuffer() { - - boost::recursive_mutex::scoped_lock lock(m_configMutex); - - string tempString1(""); - - TiXmlDocument doc(styleSheetFileName); - - if(doc.LoadFile()) { - TiXmlHandle docHandle( &doc ); - - TiXmlElement* colorList = docHandle.FirstChild( "PokerTH" ).FirstChild( "Table" ).FirstChild( "Colors" ).FirstChild().ToElement(); - - for( ; colorList; colorList=colorList->NextSiblingElement()) { - const char *tmpStr1 = colorList->Attribute("value"); - if (tmpStr1) { - tempString1 = tmpStr1; - colorsBufferList.push_back(Colors(colorList->ValueStr(), tempString1)); -// cout << colorList->ValueStr() << " : " << tempString1 << endl; - } - } - } -} - - -string StyleSheetReader::readColorString(string varName) const -{ - boost::recursive_mutex::scoped_lock lock(m_configMutex); - - size_t i; - string tempString(""); - - for (i=0; i -#include - -#include - - -class StyleSheetReader{ -public: - StyleSheetReader(std::string f); - ~StyleSheetReader(); - - void fillBuffer(); - - std::string readColorString(std::string varName) const; - -private: - - mutable boost::recursive_mutex m_configMutex; - - struct Colors - { - Colors(const std::string &n, const std::string &v) : name(n), value(v) {} - std::string name; - std::string value; - }; - - std::vector colorsBufferList; - - std::string styleSheetFileName; -}; - -#endif