• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegames API Reference
  • KDE Home
  • Contact Us
 

granatier

  • sources
  • kde-4.14
  • kdegames
  • granatier
  • src
  • config
arenasettings.cpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2009 Mathias Kraus <k.hias@gmx.de>
3  Copyright (C) 2007 Mauricio Piacentini <mauricio@tabuleiro.com>
4  Copyright (C) 2007 Matt Williams <matt@milliams.com>
5 
6  This library is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 */
20 
21 #include "arenasettings.h"
22 
23 #include <KStandardDirs>
24 #include <KConfig>
25 #include <KConfigGroup>
26 #include <KDebug>
27 #include <QtCore/QFile>
28 #include <QtCore/QFileInfo>
29 
30 class ArenaSettingsPrivate
31 {
32  public:
33  ArenaSettingsPrivate() : loaded(false) {}
34 
35  QMap<QString, QString> arenaProperties;
36  QString fullPath;
37  QString fileName;
38  QString graphics;
39  QString prefix;
40  QString arenaGroup;
41 
42  bool loaded;
43 };
44 
45 ArenaSettings::ArenaSettings(const QString &arenaGroup)
46  : d(new ArenaSettingsPrivate)
47 {
48  d->arenaGroup = arenaGroup;
49  //KGlobal::dirs()->addResourceType("gametheme", KStandardDirs::kde_default("data") + KGlobal::mainComponent().componentName());
50 }
51 
52 ArenaSettings::~ArenaSettings() {
53  delete d;
54 }
55 
56 bool ArenaSettings::loadDefault()
57 {
58  return load("arenas/granatier.desktop"); //TODO make this editable to match custom directories.
59  // If this ever changes change findArenas in ArenaSelectorPrivate too
60 }
61 
62 #define kArenaVersionFormat 1
63 
64 bool ArenaSettings::load(const QString &fileName) {
65  if( fileName.isEmpty() )
66  {
67  kDebug(11000) << "Refusing to load arena with no name";
68  return false;
69  }
70  QString filePath = KStandardDirs::locate("appdata", fileName);
71  kDebug(11000) << "Attempting to load .desktop at" << filePath;
72  if (filePath.isEmpty()) {
73  return false;
74  }
75 
76  // verify if it is a valid file first and if we can open it
77  QFile arenaFile(filePath);
78  if (!arenaFile.open(QIODevice::ReadOnly)) {
79  kDebug(11000) << "Could not open .desktop arena file" << filePath;
80  return false;
81  }
82  d->prefix = QFileInfo(arenaFile).absolutePath() + '/';
83  arenaFile.close();
84 
85  KConfig arenaConfig(filePath, KConfig::SimpleConfig);
86  if (!arenaConfig.hasGroup(d->arenaGroup))
87  {
88  kDebug(11000) << "Config group" << d->arenaGroup << "does not exist in" << filePath;
89  return false;
90  }
91  KConfigGroup group = arenaConfig.group(d->arenaGroup);
92 
93  //Copy the whole entryMap, so we can inherit generic properties as well, reducing the need to subclass for simple implementations
94  d->arenaProperties = group.entryMap();
95 
96  //Version control
97  int arenaVersion = group.readEntry("VersionFormat",0);
98  //Format is increased when we have incompatible changes, meaning that older clients are not able to use the remaining information safely
99  if (arenaVersion > kArenaVersionFormat) {
100  return false;
101  }
102 
103  QString arenaName = group.readEntry("FileName");
104  //d->graphics = KStandardDirs::locate("appdata", graphName);
105  d->graphics = d->prefix + arenaName;
106  if (d->graphics.isEmpty()) return false;
107 
108  // let's see if svg file exists and can be opened
109  QFile svgFile( d->graphics );
110  if ( !svgFile.open( QIODevice::ReadOnly ) ) {
111  kDebug(11000) << "Could not open file" << d->graphics;
112  return false;
113  }
114 
115  QString previewName = group.readEntry("Preview");
116  //QString graphicsPath = KStandardDirs::locate("appdata", previewName);
117  QString graphicsPath = d->prefix + previewName;
118 
119  d->fileName = fileName;
120  d->fullPath = filePath;
121  d->loaded = true;
122  return true;
123 }
124 
125 QString ArenaSettings::property(const QString &key) const
126 {
127  if(!d->loaded)
128  {
129  kDebug(11000) << "No arena file has been loaded. ArenaSettings::load() or ArenaSettings::loadDefault() must be called.";
130  return QString();
131  }
132  KConfig arenaConfig(path(), KConfig::SimpleConfig);
133  KConfigGroup group = arenaConfig.group(d->arenaGroup);
134  return group.readEntry(key, QString());
135 }
136 
137 QString ArenaSettings::path() const {
138  if(!d->loaded)
139  {
140  kDebug(11000) << "No arena file has been loaded. ArenaSettings::load() or ArenaSettings::loadDefault() must be called.";
141  return QString();
142  }
143  return d->fullPath;
144 }
145 
146 QString ArenaSettings::fileName() const {
147  if(!d->loaded)
148  {
149  kDebug(11000) << "No arena file has been loaded. ArenaSettings::load() or ArenaSettings::loadDefault() must be called.";
150  return QString();
151  }
152  return d->fileName;
153 }
154 
155 QString ArenaSettings::graphics() const {
156  if(!d->loaded)
157  {
158  kDebug(11000) << "No arena file has been loaded. ArenaSettings::load() or ArenaSettings::loadDefault() must be called.";
159  return QString();
160  }
161  return d->graphics;
162 }
163 
164 QString ArenaSettings::arenaProperty(const QString &key) const {
165  if(!d->loaded)
166  {
167  kDebug(11000) << "No arena file has been loaded. ArenaSettings::load() or ArenaSettings::loadDefault() must be called.";
168  return QString();
169  }
170  return d->arenaProperties[key];
171 }
ArenaSettings::load
virtual bool load(const QString &file)
Load a specific arena file.
Definition: arenasettings.cpp:64
ArenaSettings::~ArenaSettings
virtual ~ArenaSettings()
Definition: arenasettings.cpp:52
ArenaSettings::fileName
QString fileName() const
Definition: arenasettings.cpp:146
ArenaSettings::graphics
virtual QString graphics() const
Definition: arenasettings.cpp:155
QMap< QString, QString >
kArenaVersionFormat
#define kArenaVersionFormat
Definition: arenasettings.cpp:62
ArenaSettings::property
QString property(const QString &key) const
Definition: arenasettings.cpp:125
ArenaSettings::ArenaSettings
ArenaSettings(const QString &arenaGroup=QLatin1String("Arena"))
Definition: arenasettings.cpp:45
QFile
QString::isEmpty
bool isEmpty() const
QString
QFile::open
virtual bool open(QFlags< QIODevice::OpenModeFlag > mode)
QFileInfo
QFile::close
virtual void close()
ArenaSettings::arenaProperty
virtual QString arenaProperty(const QString &key) const
Possible keys:
Definition: arenasettings.cpp:164
arenasettings.h
QFileInfo::absolutePath
QString absolutePath() const
ArenaSettings::path
QString path() const
Definition: arenasettings.cpp:137
ArenaSettings::loadDefault
virtual bool loadDefault()
Load the default arena file.
Definition: arenasettings.cpp:56
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:18:10 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

granatier

Skip menu "granatier"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdegames API Reference

Skip menu "kdegames API Reference"
  • granatier
  • kapman
  • kblackbox
  • kgoldrunner
  • kigo
  • kmahjongg
  • KShisen
  • ksquares
  • libkdegames
  •   highscore
  •   libkdegamesprivate
  •     kgame
  • libkmahjongg
  • palapeli
  •   libpala

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal