LibKmahjongg

kmahjonggtilesetselector.cpp
1 /*
2  SPDX-FileCopyrightText: 2006 Mauricio Piacentini <[email protected]>
3 
4  SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 // own
8 #include "kmahjonggtilesetselector.h"
9 
10 // Qt
11 #include <QDir>
12 #include <QPainter>
13 #include <QStandardPaths>
14 
15 // KF
16 #include <KLocalizedString>
17 
18 // LibKMahjongg
19 #include "kmahjonggtileset.h"
20 
21 KMahjonggTilesetSelector::KMahjonggTilesetSelector(QWidget * parent, KConfigSkeleton * aconfig)
22  : QWidget(parent)
23 {
24  setupUi(this);
25  setupData(aconfig);
26 }
27 
28 KMahjonggTilesetSelector::~KMahjonggTilesetSelector()
29 {
30  tilesetMap.clear();
31 }
32 
33 void KMahjonggTilesetSelector::setupData(KConfigSkeleton * aconfig)
34 {
35  //Get our currently configured Tileset entry
36  KConfig * config = aconfig->config();
37  KConfigGroup group = config->group("General");
38  QString initialGroup = group.readEntry("Tileset_file");
39 
40  //The lineEdit widget holds our tileset path, but the user does not manipulate it directly
41  kcfg_TileSet->hide();
42 
43  //This will also load our resourcedir if it is not done already
44  KMahjonggTileset tile;
45 
46  //Now get our tilesets into a list
47  QStringList tilesAvailable;
49  for (const QString & dir : dirs) {
50  const QStringList fileNames = QDir(dir).entryList(QStringList() << QStringLiteral("*.desktop"));
51  for (const QString & file : fileNames) {
52  tilesAvailable.append(dir + QLatin1Char('/') + file);
53  }
54  }
55 
56  QLatin1String namestr("Name");
57  int numvalidentries = 0;
58  for (int i = 0; i < tilesAvailable.size(); ++i) {
59  KMahjonggTileset * aset = new KMahjonggTileset();
60  QString atileset = tilesAvailable.at(i);
61  if (aset->loadTileset(atileset)) {
62  tilesetMap.insert(aset->authorProperty(namestr), aset);
63  tilesetList->addItem(aset->authorProperty(namestr));
64  //Find if this is our currently configured Tileset
65  if (atileset == initialGroup) {
66  //Select current entry
67  tilesetList->setCurrentRow(numvalidentries);
68  tilesetChanged();
69  }
70  ++numvalidentries;
71  } else {
72  delete aset;
73  }
74  }
75 
76  connect(tilesetList, &QListWidget::currentItemChanged, this, &KMahjonggTilesetSelector::tilesetChanged);
77 }
78 
79 void KMahjonggTilesetSelector::tilesetChanged()
80 {
81  KMahjonggTileset * selTileset = tilesetMap.value(tilesetList->currentItem()->text());
82  //Sanity checkings. Should not happen.
83  if (selTileset == nullptr) {
84  return;
85  }
86  if (selTileset->path() == kcfg_TileSet->text()) {
87  return;
88  }
89  QLatin1String authstr("Author");
90  QLatin1String contactstr("AuthorEmail");
91  QLatin1String descstr("Description");
92  kcfg_TileSet->setText(selTileset->path());
93  tilesetAuthor->setText(selTileset->authorProperty(authstr));
94  tilesetContact->setText(selTileset->authorProperty(contactstr));
95  tilesetDescription->setText(selTileset->authorProperty(descstr));
96 
97  //Make sure SVG is loaded when graphics is selected
98  if (!selTileset->loadGraphics()) {
99  return;
100  }
101  //Let the tileset calculate its ideal size for the preview area, but reduce the margins a bit (pass oversized drawing area)
102  QSize tilesize = selTileset->preferredTileSize(tilesetPreview->size() * 1.3, 1, 1);
103  selTileset->reloadTileset(tilesize);
104  //Draw the preview
105  QImage qiRend(tilesetPreview->size(), QImage::Format_ARGB32_Premultiplied);
106  qiRend.fill(0);
107  QPainter p(&qiRend);
108  //Calculate the margins to center the tile
109  QSize margin = tilesetPreview->size() - tilesize;
110  //Draw unselected tile and first tileface
111  p.drawPixmap(margin.width() / 2, margin.height() / 2, selTileset->unselectedTile(1));
112  p.drawPixmap(margin.width() / 2, margin.height() / 2, selTileset->tileface(0));
113  p.end();
114  tilesetPreview->setPixmap(QPixmap::fromImage(qiRend));
115 }
void append(const T &value)
QString readEntry(const char *key, const char *aDefault=nullptr) const
QPixmap fromImage(const QImage &image, Qt::ImageConversionFlags flags)
Format_ARGB32_Premultiplied
void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
int width() const const
int size() const const
int height() const const
const T & at(int i) const const
KSharedConfigPtr config()
KStandardDirs * dirs()
KConfig * config()
QStringList locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options)
QStringList entryList(QDir::Filters filters, QDir::SortFlags sort) const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon May 8 2023 04:09:42 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.