• 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
arenaselector.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 "arenaselector.h"
22 #include "arena.h"
23 #include "arenaitem.h"
24 #include "mapparser.h"
25 #include "settings.h"
26 
27 #include <QtCore/QPointer>
28 
29 #include <KgTheme>
30 #include <KGameRenderer>
31 #include <KStandardDirs>
32 #include <KConfigSkeleton>
33 #include <KNS3/DownloadDialog>
34 #include <KSaveFile>
35 #include <QDir>
36 #include <KComponentData>
37 
38 #include "ui_arenaselector.h"
39 #include "arenasettings.h"
40 
41 class ArenaSelector::Private
42 {
43  public:
44  Private(ArenaSelector* parent, Options options);
45  ~Private();
46 
47  ArenaSelector* q;
48  Options m_options;
49 
50  QMap<QString, ArenaSettings*> arenaMap;
51  Ui::ArenaSelectorBase ui;
52  QString lookupDirectory;
53  QString groupName;
54 
55  Arena* m_arena;
56  KGameRenderer* m_renderer;
57  QGraphicsScene* m_graphicsScene;
58  QList <KGameRenderedItem*> m_arenaItems;
59  qreal m_svgScaleFactor;
60 
61  QStringList* m_randomArenaModeArenaList;
62  QStringList m_tempRandomArenaModeArenaList;
63 
64  void setupData(KConfigSkeleton* aconfig);
65  void findArenas(const QString &initialSelection);
66  QSize calculateSvgSize();
67 
68  // private slots
69  void _k_updatePreview(QListWidgetItem* currentItem = NULL);
70  void _k_updateArenaList(const QString& strArena);
71  void _k_openKNewStuffDialog();
72  void _k_importArenasDialog();
73  void _k_setRandomArenaMode(bool randomModeEnabled);
74  void _k_updateRandomArenaModeArenaList(QListWidgetItem* item);
75 };
76 
77 ArenaSelector::ArenaSelector(QWidget* parent, KConfigSkeleton* aconfig, QStringList* randomArenaModeArenaList, ArenaSelector::Options options, const QString& groupName, const QString& directory)
78  : QWidget(parent), d(new Private(this, options))
79 {
80  d->m_randomArenaModeArenaList = randomArenaModeArenaList;
81  d->lookupDirectory = directory;
82  d->groupName = groupName;
83  d->setupData(aconfig);
84 }
85 
86 ArenaSelector::~ArenaSelector()
87 {
88  delete d;
89 }
90 
91 void ArenaSelector::resizeEvent(QResizeEvent*)
92 {
93  d->_k_updatePreview();
94 }
95 
96 void ArenaSelector::showEvent(QShowEvent*)
97 {
98  d->_k_updatePreview();
99 }
100 
101 ArenaSelector::Private::Private(ArenaSelector* parent, Options options) : q(parent), m_options(options), m_arena(NULL), m_graphicsScene(NULL), m_svgScaleFactor(1)
102 {
103  KgTheme* theme = new KgTheme(QByteArray());
104  theme->setGraphicsPath(KStandardDirs::locate("appdata", QString("themes/granatier.svgz")));
105  m_renderer = new KGameRenderer(theme);
106 }
107 
108 ArenaSelector::Private::~Private()
109 {
110  qDeleteAll(arenaMap);
111  if(m_graphicsScene)
112  {
113  qDeleteAll(m_arenaItems);
114  delete m_graphicsScene;
115  }
116  delete m_renderer;
117  delete m_arena;
118 }
119 
120 void ArenaSelector::Private::setupData(KConfigSkeleton * aconfig)
121 {
122  ui.setupUi(q);
123 
124  //setup KNS button
125  if (m_options & EnableNewStuffDownload)
126  {
127  ui.getNewButton->setIcon(KIcon( QLatin1String( "get-hot-new-stuff" )));
128  connect(ui.getNewButton, SIGNAL(clicked()), q, SLOT(_k_openKNewStuffDialog()));
129  }
130  else
131  {
132  ui.getNewButton->hide();
133  }
134 
135 
136  //The lineEdit widget holds our arena path for automatic connection via KConfigXT.
137  //But the user should not manipulate it directly, so we hide it.
138  ui.kcfg_Arena->hide();
139  connect(ui.kcfg_Arena, SIGNAL(textChanged(QString)), q, SLOT(_k_updateArenaList(QString)));
140 
141  //graphicsscene for new arena preview
142  m_graphicsScene = new QGraphicsScene();
143  ui.arenaPreview->setScene(m_graphicsScene);
144  ui.arenaPreview->setBackgroundBrush(Qt::black);
145 
146  //Get the last used arena path from the KConfigSkeleton
147  KConfigSkeletonItem * configItem = aconfig->findItem("Arena");
148  QString lastUsedArena = configItem->property().toString();
149 
150  configItem = aconfig->findItem("RandomArenaModeArenaList");
151  m_tempRandomArenaModeArenaList = configItem->property().toStringList();
152  m_tempRandomArenaModeArenaList.removeDuplicates();
153 
154  //Now get our arenas into the list widget
155  KGlobal::dirs()->addResourceType("arenaselector", "data", KGlobal::mainComponent().componentName() + '/' + lookupDirectory + '/');
156  findArenas(lastUsedArena);
157 
158  connect(ui.importArenas, SIGNAL(clicked()), q, SLOT(_k_importArenasDialog()));
159  connect(ui.kcfg_RandomArenaMode, SIGNAL(toggled(bool)), q, SLOT(_k_setRandomArenaMode(bool)));
160 }
161 
162 void ArenaSelector::Private::findArenas(const QString &initialSelection)
163 {
164  qDeleteAll(arenaMap);
165  arenaMap.clear();
166 
167  //Disconnect the arenaList as we are going to clear it and do not want previews generated
168  ui.arenaList->disconnect();
169  ui.arenaList->clear();
170  ui.arenaList->setSortingEnabled(true);
171 
172  QStringList arenasAvailable;
173  KGlobal::dirs()->findAllResources("arenaselector", "*.desktop", KStandardDirs::Recursive, arenasAvailable);
174 
175  QStringList::Iterator i = m_tempRandomArenaModeArenaList.begin();
176  while(i != m_tempRandomArenaModeArenaList.end())
177  {
178  if(arenasAvailable.contains(*i))
179  {
180  i++;
181  }
182  else
183  {
184  i = m_tempRandomArenaModeArenaList.erase(i);
185  }
186  }
187 
188  if(m_tempRandomArenaModeArenaList.isEmpty())
189  {
190  m_tempRandomArenaModeArenaList = arenasAvailable;
191  }
192 
193  bool initialFound = false;
194  foreach (const QString &file, arenasAvailable)
195  {
196  QString arenaPath = lookupDirectory + '/' + file;
197  ArenaSettings* arenaSettings = new ArenaSettings(groupName);
198 
199  if (arenaSettings->load(arenaPath)) {
200  QString arenaName = arenaSettings->arenaProperty("Name");
201  //Add underscores to avoid duplicate names.
202  while (arenaMap.contains(arenaName))
203  arenaName += '_';
204  arenaMap.insert(arenaName, arenaSettings);
205  QListWidgetItem * item = new QListWidgetItem(arenaName, ui.arenaList);
206  if(ui.kcfg_RandomArenaMode->isChecked())
207  {
208  if(m_tempRandomArenaModeArenaList.contains(file))
209  {
210  item->setCheckState(Qt::Checked);
211  }
212  else
213  {
214  item->setCheckState(Qt::Unchecked);
215  }
216  item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
217  }
218  else
219  {
220  item->setCheckState(Qt::PartiallyChecked);
221  item->setFlags(item->flags() & ~Qt::ItemIsUserCheckable);
222  }
223 
224  //Find if this is our currently configured arena
225  if (arenaPath==initialSelection) {
226  initialFound = true;
227  ui.arenaList->setCurrentItem(item);
228  _k_updatePreview(item);
229  }
230  } else {
231  delete arenaSettings;
232  }
233  }
234 
235  if (!initialFound)
236  {
237  // TODO change this if we ever change ArenaSettings::loadDefault
238  QString defaultPath = "arenas/granatier.desktop";
239  foreach(ArenaSettings* arenaSettings, arenaMap)
240  {
241  if (arenaSettings->path().endsWith(defaultPath))
242  {
243  const QList<QListWidgetItem *> itemList = ui.arenaList->findItems(arenaSettings->arenaProperty("Name"), Qt::MatchExactly);
244  // never can be != 1 but better safe than sorry
245  if (itemList.count() == 1)
246  {
247  ui.arenaList->setCurrentItem(itemList.first());
248  _k_updatePreview(itemList.first());
249  }
250  }
251  }
252  }
253 
254  //Reconnect the arenaList
255  connect(ui.arenaList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), q, SLOT(_k_updatePreview(QListWidgetItem*)));
256  if(ui.kcfg_RandomArenaMode->isChecked())
257  {
258  connect(ui.arenaList, SIGNAL(itemChanged(QListWidgetItem*)), q, SLOT(_k_updateRandomArenaModeArenaList(QListWidgetItem*)));
259  }
260 }
261 
262 void ArenaSelector::Private::_k_updatePreview(QListWidgetItem* currentItem)
263 {
264  if(currentItem != NULL)
265  {
266  ArenaSettings * selArena = arenaMap.value(ui.arenaList->currentItem()->text());
267  //Sanity checkings. Should not happen.
268  if (!selArena) return;
269  if (selArena->path() == ui.kcfg_Arena->text()) {
270  return;
271  }
272  ui.kcfg_Arena->setText(selArena->fileName());
273 
274  QString authstr("Author");
275  QString contactstr("AuthorEmail");
276  QString descstr("Description");
277  QString emailstr = selArena->arenaProperty(contactstr);
278  if(emailstr.compare("-") == 0) // the imported clanbomber arenas have a "-" if no email address was defined in the clanbomber arena file
279  {
280  emailstr.clear();
281  }
282  if (!emailstr.isEmpty())
283  {
284  emailstr = QString("<a href=\"mailto:%1\">%1</a>").arg(selArena->arenaProperty(contactstr));
285  }
286 
287  ui.arenaAuthor->setText(i18nc("Author attribution, e.g. \"by Jack\"", "by %1", selArena->arenaProperty(authstr)));
288  ui.arenaContact->setText(emailstr);
289  ui.arenaDescription->setText(selArena->arenaProperty(descstr));
290 
291  //show the arena without a preview pixmap
292  delete m_arena;
293  m_arena = new Arena;
294  MapParser mapParser(m_arena);
295  QFile arenaXmlFile(selArena->graphics());
296  QXmlInputSource source(&arenaXmlFile);
297  // Create the XML file reader
298  QXmlSimpleReader reader;
299  reader.setContentHandler(&mapParser);
300  // Parse the XML file
301  reader.parse(source);
302 
303  while(!m_arenaItems.isEmpty())
304  {
305  if(m_graphicsScene->items().contains(m_arenaItems.last()))
306  {
307  m_graphicsScene->removeItem(m_arenaItems.last());
308  }
309  delete m_arenaItems.takeLast();
310  }
311 
312  ui.arenaPreview->setSceneRect(0, 0, m_arena->getNbColumns()*Granatier::CellSize, m_arena->getNbRows()*Granatier::CellSize);
313  ui.arenaPreview->fitInView(ui.arenaPreview->sceneRect(), Qt::KeepAspectRatio);
314  }
315 
316  qreal svgScaleFactor;
317  QRectF minSize = ui.arenaPreview->sceneRect();
318 
319  if(minSize.width() == 0)
320  {
321  minSize.setWidth(1);
322  }
323  if(minSize.height() == 0)
324  {
325  minSize.setHeight(1);
326  }
327 
328  //calculate the scaling factor for the SVGs
329  int horizontalPixelsPerCell = (ui.arenaPreview->size().width() - 4) / (minSize.width()/Granatier::CellSize);
330  int verticalPixelsPerCell = (ui.arenaPreview->size().height() - 4) / (minSize.height()/Granatier::CellSize);
331  if(horizontalPixelsPerCell < verticalPixelsPerCell)
332  {
333  svgScaleFactor = Granatier::CellSize / horizontalPixelsPerCell;
334  }
335  else
336  {
337  svgScaleFactor = Granatier::CellSize / verticalPixelsPerCell;
338  }
339 
340  QTransform transform;
341  transform.scale(1/svgScaleFactor, 1/svgScaleFactor);
342  m_graphicsScene->views().first()->setTransform(transform);
343  m_graphicsScene->views().first()->centerOn( ui.arenaPreview->sceneRect().center());
344 
345  if(currentItem == NULL)
346  {
347  if(m_svgScaleFactor != svgScaleFactor)
348  {
349  m_svgScaleFactor = svgScaleFactor;
350  foreach(KGameRenderedItem* arenaItem, m_arenaItems)
351  {
352  arenaItem->setRenderSize(calculateSvgSize());
353  arenaItem->setScale(m_svgScaleFactor);
354  }
355  }
356  }
357  else
358  {
359  m_svgScaleFactor = svgScaleFactor;
360  for (int i = 0; i < m_arena->getNbRows(); ++i)
361  {
362  for (int j = 0; j < m_arena->getNbColumns(); ++j)
363  {
364  // Create the ArenaItem and set the image
365  ArenaItem* arenaItem = new ArenaItem(j * Granatier::CellSize, i * Granatier::CellSize, m_renderer, "");
366 
367  switch(m_arena->getCell(i,j).getType())
368  {
369  case Granatier::Cell::WALL:
370  arenaItem->setSpriteKey("arena_wall");
371  arenaItem->setZValue(-2);
372  break;
373  case Granatier::Cell::BLOCK:
374  arenaItem->setSpriteKey("arena_block");
375  arenaItem->setZValue(0);
376  break;
377  case Granatier::Cell::HOLE:
378  delete arenaItem;
379  arenaItem = NULL;
380  break;
381  case Granatier::Cell::ICE:
382  arenaItem->setSpriteKey("arena_ice");
383  arenaItem->setZValue(0);
384  break;
385  case Granatier::Cell::BOMBMORTAR:
386  arenaItem->setSpriteKey("arena_bomb_mortar");
387  arenaItem->setZValue(0);
388  break;
389  case Granatier::Cell::ARROWUP:
390  arenaItem->setSpriteKey("arena_arrow_up");
391  arenaItem->setZValue(0);
392  break;
393  case Granatier::Cell::ARROWRIGHT:
394  arenaItem->setSpriteKey("arena_arrow_right");
395  arenaItem->setZValue(0);
396  break;
397  case Granatier::Cell::ARROWDOWN:
398  arenaItem->setSpriteKey("arena_arrow_down");
399  arenaItem->setZValue(0);
400  break;
401  case Granatier::Cell::ARROWLEFT:
402  arenaItem->setSpriteKey("arena_arrow_left");
403  arenaItem->setZValue(0);
404  break;
405  case Granatier::Cell::GROUND:
406  default:
407  arenaItem->setSpriteKey("arena_ground");
408  arenaItem->setZValue(-1);
409  }
410  if(arenaItem)
411  {
412  arenaItem->setRenderSize(calculateSvgSize());
413  arenaItem->setScale(m_svgScaleFactor);
414 
415  m_arenaItems.append(arenaItem);
416  m_graphicsScene->addItem(arenaItem);
417  }
418  }
419  }
420  }
421 }
422 
423 QSize ArenaSelector::Private::calculateSvgSize()
424 {
425  if(m_graphicsScene->views().isEmpty())
426  {
427  return QSize(1, 1);
428  }
429 
430  QPoint topLeft(0, 0);
431  topLeft = m_graphicsScene->views().first()->mapFromScene(topLeft);
432 
433  QPoint bottomRight(Granatier::CellSize, Granatier::CellSize);
434  bottomRight = m_graphicsScene->views().first()->mapFromScene(bottomRight);
435 
436  QSize svgSize;
437  svgSize.setHeight(bottomRight.y() - topLeft.y());
438  svgSize.setWidth(bottomRight.x() - topLeft.x());
439 
440  return svgSize;
441 }
442 
443 void ArenaSelector::Private::_k_updateArenaList(const QString& strArena)
444 {
445  //find arena and set selection to the current arena; happens when pressing "Default"
446  if(arenaMap.value(ui.arenaList->currentItem()->text())->fileName() != strArena)
447  {
448  for(int i = 0; i < ui.arenaList->count(); i++)
449  {
450  if(arenaMap.value(ui.arenaList->item(i)->text())->fileName() == strArena)
451  {
452  ui.arenaList->setCurrentItem(ui.arenaList->item(i));
453  break;
454  }
455  }
456  }
457 }
458 
459 void ArenaSelector::Private::_k_openKNewStuffDialog()
460 {
461  QPointer<KNS3::DownloadDialog> dialog = new KNS3::DownloadDialog (q);
462  if(dialog->exec() == QDialog::Accepted)
463  {
464  if(!(dialog->changedEntries().isEmpty()))
465  {
466  //TODO: discover new arenas and add them to the list
467  }
468  }
469  delete dialog;
470 }
471 
472 void ArenaSelector::Private::_k_importArenasDialog()
473 {
474  //find the clanbomber files
475  QStringList listClanbomberPaths;
476  listClanbomberPaths.append(QDir::homePath() + "/.clanbomber/maps/");
477  for(int i = 0; i < listClanbomberPaths.count(); i++)
478  {
479  QDir clanbomberDir(listClanbomberPaths[i]);
480  if(!clanbomberDir.exists())
481  {
482  continue;
483  }
484 
485  QStringList listMaps;
486  listMaps = clanbomberDir.entryList(QStringList("*.map"));
487  for(int j = 0; j < listMaps.count(); j++)
488  {
489  QFile mapFile(listClanbomberPaths[i] + listMaps[j]);
490  mapFile.open(QIODevice::ReadOnly | QIODevice::Text);
491  QTextStream readStream(&mapFile);
492 
493  QString strAuthor = readStream.readLine();
494  int nNumberOfPlayers = readStream.readLine().toInt();
495 
496  KSaveFile desktopFile;
497  QString strName = listMaps[j].left(listMaps[j].count()-4);
498  desktopFile.setFileName(QString("%1clanbomber_%2.desktop").arg(KStandardDirs::locateLocal("appdata", "arenas/")).arg(strName));
499  desktopFile.open();
500  QTextStream streamDesktopFile(&desktopFile);
501 
502  streamDesktopFile << "[Arena]\n";
503  streamDesktopFile << "Name=" << strName << "\n";
504  streamDesktopFile << "Description=Clanbomber Import\n";
505  streamDesktopFile << "Type=XML\n";
506  streamDesktopFile << "FileName=clanbomber_" << strName << ".xml\n";
507  streamDesktopFile << "Author=" << strAuthor << "\n";
508  streamDesktopFile << "AuthorEmail=-\n";
509 
510  streamDesktopFile.flush();
511  desktopFile.finalize();
512  desktopFile.close();
513 
514  QStringList arena;
515  do
516  {
517  arena.append(readStream.readLine());
518  }
519  while(!readStream.atEnd());
520  arena.replaceInStrings("*", "=");
521  arena.replaceInStrings(" ", "_");
522  arena.replaceInStrings("-", " ");
523  arena.replaceInStrings("S", "-");
524  arena.replaceInStrings("R", "x");
525  arena.replaceInStrings("^", "u");
526  arena.replaceInStrings(">", "r");
527  arena.replaceInStrings("v", "d");
528  arena.replaceInStrings("<", "l");
529  arena.replaceInStrings("0", "p");
530  arena.replaceInStrings("1", "p");
531  arena.replaceInStrings("2", "p");
532  arena.replaceInStrings("3", "p");
533  arena.replaceInStrings("4", "p");
534  arena.replaceInStrings("5", "p");
535  arena.replaceInStrings("6", "p");
536  arena.replaceInStrings("7", "p");
537  arena.replaceInStrings("8", "p");
538  arena.replaceInStrings("9", "p");
539 
540  KSaveFile arenaFile;
541  arenaFile.setFileName(QString("%1clanbomber_%2.xml").arg(KStandardDirs::locateLocal("appdata", "arenas/")).arg(strName));
542  arenaFile.open();
543 
544  QTextStream streamArenaFile(&arenaFile);
545 
546  streamArenaFile << "<?xml version=\"1.0\"?>\n";
547  streamArenaFile << "<Arena arenaFileVersion=\"1\" rowCount=\"" << arena.count() << "\" colCount=\"" << arena[0].count() << "\">\n";
548  for(int j = 0; j < arena.count(); j++)
549  {
550  streamArenaFile << " <Row>" << arena[j] << "</Row>\n";
551  }
552  streamArenaFile << "</Arena>\n";
553  }
554  }
555 
556  ArenaSettings* selArena = arenaMap.value(ui.arenaList->currentItem()->text());
557  findArenas(selArena->fileName());
558 }
559 
560 void ArenaSelector::Private::_k_setRandomArenaMode(bool randomModeEnabled)
561 {
562  if(!randomModeEnabled)
563  {
564  disconnect(ui.arenaList, SIGNAL(itemChanged(QListWidgetItem*)), q, SLOT(_k_updateRandomArenaModeArenaList(QListWidgetItem*)));
565  }
566 
567  m_randomArenaModeArenaList->clear();
568 
569  int numberOfItems = ui.arenaList->count();
570  for(int i = 0; i < numberOfItems; i++)
571  {
572  QListWidgetItem* item = ui.arenaList->item(i);
573  if(randomModeEnabled)
574  {
575  QString arenaName = arenaMap.value(item->text())->fileName();
576  arenaName.remove(0, 7); //length of "arenas/"
577  if(m_tempRandomArenaModeArenaList.contains(arenaName))
578  {
579  item->setCheckState(Qt::Checked);
580  }
581  else
582  {
583  item->setCheckState(Qt::Unchecked);
584  }
585  item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
586  }
587  else
588  {
589  item->setCheckState(Qt::PartiallyChecked);
590  item->setFlags(item->flags() & ~Qt::ItemIsUserCheckable);
591  }
592  }
593 
594  if(randomModeEnabled)
595  {
596  *m_randomArenaModeArenaList = m_tempRandomArenaModeArenaList;
597  connect(ui.arenaList, SIGNAL(itemChanged(QListWidgetItem*)), q, SLOT(_k_updateRandomArenaModeArenaList(QListWidgetItem*)));
598  }
599 }
600 
601 void ArenaSelector::Private::_k_updateRandomArenaModeArenaList(QListWidgetItem* item)
602 {
603  QString arenaName = arenaMap.value(item->text())->fileName();
604  arenaName.remove(0, 7); //length of "arenas/"
605  if(item->checkState() == Qt::Checked)
606  {
607  m_tempRandomArenaModeArenaList.append(arenaName);
608  }
609  else
610  {
611  int index = m_tempRandomArenaModeArenaList.indexOf(arenaName);
612  if(index >= 0)
613  {
614  m_tempRandomArenaModeArenaList.removeAt(index);
615  }
616  }
617  m_tempRandomArenaModeArenaList.removeDuplicates();
618  *m_randomArenaModeArenaList = m_tempRandomArenaModeArenaList;
619  Settings::self()->setDummy(Settings::self()->dummy() + 3);
620 }
621 #include "arenaselector.moc"
Granatier::Cell::GROUND
Definition: granatierglobals.h:74
ArenaSettings::load
virtual bool load(const QString &file)
Load a specific arena file.
Definition: arenasettings.cpp:64
QTransform
QString::indexOf
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const
QResizeEvent
QWidget
Granatier::Cell::ICE
Definition: granatierglobals.h:77
QSize::setHeight
void setHeight(int height)
QString::append
QString & append(QChar ch)
QListWidgetItem::checkState
Qt::CheckState checkState() const
QGraphicsScene
QXmlSimpleReader
QByteArray
MapParser
This class handles XML reader events in order to initialize the Arena properties. ...
Definition: mapparser.h:30
Granatier::Cell::ARROWDOWN
Definition: granatierglobals.h:80
ArenaSettings::fileName
QString fileName() const
Definition: arenasettings.cpp:146
ArenaSettings::graphics
virtual QString graphics() const
Definition: arenasettings.cpp:155
QMap< QString, ArenaSettings * >
QPointer
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
arenaitem.h
QListWidgetItem
arenaselector.h
QPoint
KConfigSkeleton
QString::remove
QString & remove(int position, int n)
QListWidgetItem::flags
Qt::ItemFlags flags() const
QDir::homePath
QString homePath()
QFile
QTextStream
QRectF::setHeight
void setHeight(qreal height)
QString::clear
void clear()
Settings::self
static Settings * self()
Definition: settings.cpp:17
QList::count
int count(const T &value) const
Granatier::CellSize
const qreal CellSize
The Cell size.
Definition: granatierglobals.h:31
QList::append
void append(const T &value)
Granatier::Cell::ARROWRIGHT
Definition: granatierglobals.h:82
QString::insert
QString & insert(int position, QChar ch)
QTransform::scale
QTransform & scale(qreal sx, qreal sy)
ArenaSelector::ArenaSelector
ArenaSelector(QWidget *parent, KConfigSkeleton *aconfig, QStringList *randomArenaModeArenaList, Options options=DefaultBehavior, const QString &groupName=QLatin1String("Arena"), const QString &directory=QLatin1String("arenas"))
Load a specific arena file.
Definition: arenaselector.cpp:77
ArenaSelector::resizeEvent
void resizeEvent(QResizeEvent *p_event)
Resizes the items when the view is resized.
Definition: arenaselector.cpp:91
ArenaItem
This class is the graphical view of the Arena.
Definition: arenaitem.h:30
QShowEvent
QString::toInt
int toInt(bool *ok, int base) const
QSize::setWidth
void setWidth(int width)
QListWidgetItem::setFlags
void setFlags(QFlags< Qt::ItemFlag > flags)
QString::isEmpty
bool isEmpty() const
mapparser.h
QString::endsWith
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const
QList::Iterator
typedef Iterator
Arena
This class represents the Arena of the game.
Definition: arena.h:36
Granatier::Cell::WALL
Definition: granatierglobals.h:75
QStringList::replaceInStrings
QStringList & replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs)
QList::first
T & first()
QString
QListWidgetItem::setCheckState
void setCheckState(Qt::CheckState state)
QList< KGameRenderedItem * >
QStringList
QSize
ArenaSelector::showEvent
void showEvent(QShowEvent *p_event)
Resizes the items when the view is showed.
Definition: arenaselector.cpp:96
QDir
QXmlInputSource
QRectF::width
qreal width() const
ArenaSettings::arenaProperty
virtual QString arenaProperty(const QString &key) const
Possible keys:
Definition: arenasettings.cpp:164
settings.h
QLatin1String
QRectF
QRectF::setWidth
void setWidth(qreal width)
ArenaSettings
Class for loading arena files.
Definition: arenasettings.h:41
ArenaSelector
A widget used to select the game's arena.
Definition: arenaselector.h:46
QXmlSimpleReader::parse
virtual bool parse(const QXmlInputSource &input)
KGameRenderedItem
Granatier::Cell::ARROWUP
Definition: granatierglobals.h:79
arena.h
QRectF::height
qreal height() const
arenasettings.h
Settings::setDummy
static void setDummy(int v)
Set This is a dummy setting for player setup.
Definition: settings.h:248
Granatier::Cell::BOMBMORTAR
Definition: granatierglobals.h:78
Granatier::Cell::ARROWLEFT
Definition: granatierglobals.h:81
QObject::parent
QObject * parent() const
Granatier::Cell::HOLE
Definition: granatierglobals.h:73
QString::compare
int compare(const QString &other) const
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
ArenaSettings::path
QString path() const
Definition: arenasettings.cpp:137
QListWidgetItem::text
QString text() const
QXmlSimpleReader::setContentHandler
virtual void setContentHandler(QXmlContentHandler *handler)
ArenaSelector::~ArenaSelector
virtual ~ArenaSelector()
Definition: arenaselector.cpp:86
Granatier::Cell::BLOCK
Definition: granatierglobals.h:76
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