1 /*
2     SPDX-FileCopyrightText: 2003 Marco Krüger <grisuji@gmx.de>
3     SPDX-FileCopyrightText: 2003 Ian Wadham <iandw.au@gmail.com>
4     SPDX-FileCopyrightText: 2009 Ian Wadham <iandw.au@gmail.com>
5 
6     SPDX-License-Identifier: GPL-2.0-or-later
7 */
8 
9 #ifndef KGRSELECTOR_H
10 #define KGRSELECTOR_H
11 
12 #include <QDialog>
13 #include <QList>
14 #include <QTreeWidget>
15 #include <QTreeWidgetItem>
16 
17 /**
18 @author Ian Wadham and Marco Krüger
19 */
20 
21 class KGrGameData;
22 class KGrThumbNail;
23 class KGrGameListItem;
24 class KGrGameIO;
25 class QSpinBox;
26 class QScrollBar;
27 class QPushButton;
28 class QLabel;
29 class QTextEdit;
30 
31 /******************************************************************************/
32 /*******************    DIALOG TO SELECT A GAME AND LEVEL   *******************/
33 /******************************************************************************/
34 
35 class KGrSLDialog : public QDialog
36 {
37 Q_OBJECT
38 public:
39     KGrSLDialog (int action, int requestedLevel, int gameIndex,
40                  QList<KGrGameData *> & gameList,
41                  const QString & pSystemDir, const QString & pUserDir,
42                  QWidget * parent = nullptr);
43     ~KGrSLDialog() override;
44 
45     bool selectLevel (int & selectedGame, int & selectedLevel);
46 
47 Q_SIGNALS:
48     void editNameAndHint();
49 
50 private Q_SLOTS:
51     void slSetGames (int cIndex);
52     void slGame();
53     void slShowLevel (int i);
54     void slUpdate (const QString & text);
55     void slPaintLevel();
56     void slotHelp();				// Will replace KDE slotHelp().
57 
58 private:
59     void                setupWidgets();
60 
61     int			slAction;
62     QList<KGrGameData *> myGameList;	// List of games.
63     int			defaultGame;
64     int			defaultLevel;
65     int			slGameIndex;
66     QString             systemDir;
67     QString             userDir;
68     QWidget *		slParent;
69 
70     QLabel *		gameL;
71     QTreeWidget *	games;
72     QLabel *		gameN;
73     QLabel *		gameD;
74     QTextEdit *		gameAbout;
75 
76     QLabel *		numberL;
77     QSpinBox *		display;
78     QScrollBar *	number;
79     QPushButton *	levelNH;
80     QLabel *		slName;
81     KGrThumbNail *	thumbNail;
82 };
83 
84 /*******************************************************************************
85 *************************  ITEM FOR THE LIST OF GAMES  *************************
86 *******************************************************************************/
87 
88 class KGrGameListItem : public QTreeWidgetItem
89 {
90 public:
91     explicit KGrGameListItem (const QStringList & data, const int internalId = -1);
92     int id() const;
93     void setId (const int internalId);
94 private:
95     int mInternalId;
96 };
97 
98 /******************************************************************************/
99 /**********************    CLASS TO DISPLAY THUMBNAIL   ***********************/
100 /******************************************************************************/
101 
102 class KGrThumbNail : public QFrame
103 {
104 public:
105     explicit KGrThumbNail (QWidget *parent = nullptr);
106     ~KGrThumbNail() override;
107 
108     void setLevelData (const QString& dir, const QString& prefix,
109                        int level, QLabel * sln);
110 
111     static QColor backgroundColor;
112     static QColor brickColor;
113     static QColor ladderColor;
114     static QColor poleColor;
115 
116 protected:
117     void paintEvent (QPaintEvent * event) override;	// Draw a preview of a level.
118 
119 private:
120     KGrGameIO * io;
121     QByteArray  levelName;
122     QByteArray  levelLayout;
123     QLabel *    lName;				// Place to write level-name.
124 };
125 
126 #endif
127