2009-03-30 13:12:44 +00:00
/***************************************************************************
* 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 <iostream>
#include <sstream>
#include <cstdlib>
#include <fstream>
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 {
2009-03-30 18:12:25 +00:00
currentFileName = QFile ( QString :: fromUtf8 ( myConfig -> readConfigString ( "AppDataDir" ). c_str ()) + "gfx/cards/default/defaultdeckstyle.xml" ). fileName ();
2009-03-30 13:12:44 +00:00
tinyFileName = currentFileName . toUtf8 (). constData ();
fallBack = 1 ;
}
QFileInfo info ( currentFileName );
2009-03-30 19:01:54 +00:00
currentDir = info . absolutePath () + "/" ;
2009-03-30 13:12:44 +00:00
//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 ()); }
2009-04-10 18:31:31 +00:00
else if ( itemsList -> ValueStr () == "StyleMaintainerName" ) { StyleMaintainerName = QString :: fromUtf8 ( tempString1 . c_str ()); }
2009-04-03 09:03:31 +00:00
else if ( itemsList -> ValueStr () == "StyleMaintainerEMail" ) { StyleMaintainerEMail = QString :: fromUtf8 ( tempString1 . c_str ()); }
2009-04-10 18:31:31 +00:00
else if ( itemsList -> ValueStr () == "StyleCreateDate" ) { StyleCreateDate = QString :: fromUtf8 ( tempString1 . c_str ()); }
else if ( itemsList -> ValueStr () == "PokerTHStyleFileVersion" ) { PokerTHStyleFileVersion = QString :: fromUtf8 ( tempString1 . c_str ()); }
2009-03-31 20:31:28 +00:00
else if ( itemsList -> ValueStr () == "Preview" ) { Preview = currentDir + QString :: fromUtf8 ( tempString1 . c_str ()); }
2009-03-30 13:12:44 +00:00
}
}
}
else { qDebug () << "could not load card deck file: " << tinyFileName . c_str (); }
2009-04-03 09:03:31 +00:00
2009-04-10 18:31:31 +00:00
//check if style items are left and show warning
leftItems . clear ();
if ( StyleDescription == "" ) { leftItems << "StyleDescription" ; }
if ( StyleMaintainerName == "" ) { leftItems << "StyleMaintainerName" ; }
if ( StyleMaintainerEMail == "" ) { leftItems << "StyleMaintainerEMail" ; }
if ( StyleCreateDate == "" ) { leftItems << "StyleCreateDate" ; }
if ( PokerTHStyleFileVersion == "" ) { leftItems << "PokerTHStyleFileVersion" ; }
2009-04-03 09:03:31 +00:00
//check if all files are there
cardsLeft . clear ();
int i ;
for ( i = 0 ; i < 52 ; i ++ ) {
QString cardString ( QString :: number ( i ) + ".png" );
if ( ! QDir ( currentDir ). exists ( cardString )) {
cardsLeft << cardString ;
}
}
if ( ! QDir ( currentDir ). exists ( "flipside.png" )) {
cardsLeft << "flipside.png" ;
}
2009-04-10 18:31:31 +00:00
if ( ! leftItems . isEmpty () && myW != 0 ) showLeftItemsErrorMessage ( StyleDescription , leftItems , StyleMaintainerEMail );
else {
if ( ! cardsLeft . isEmpty () && myW != 0 ) showCardsLeftErrorMessage ( StyleDescription , cardsLeft , StyleMaintainerEMail );
}
2009-03-30 13:12:44 +00:00
}
2009-04-10 18:31:31 +00:00
void CardDeckStyleReader :: showLeftItemsErrorMessage ( QString style , QStringList failedItems , QString email )
{
QString items = failedItems . join ( ", " );
2009-04-10 20:02:28 +00:00
QMessageBox :: warning ( myW , tr ( "Card Deck Style Error" ),
tr ( "Selected card deck style \" %1 \" seems to be incomplete or defective. \n\n The value(s) of \" %2 \" is/are missing. \n\n Please contact the game table style builder %3." ). arg ( style ). arg ( items ). arg ( email ),
2009-04-10 18:31:31 +00:00
QMessageBox :: Ok );
}
void CardDeckStyleReader :: showCardsLeftErrorMessage ( QString style , QStringList failedItems , QString email )
2009-04-03 09:03:31 +00:00
{
QString items = failedItems . join ( ", " );
QMessageBox :: warning ( myW , tr ( "Card Deck Style Error" ),
tr ( "Selected card deck style \" %1 \" seems to be incomplete or defective. \n The card picture(s) \" %2 \" is/are not available. \n\n Please contact the card deck style builder %3." ). arg ( style ). arg ( items ). arg ( email ),
QMessageBox :: Ok );
}