author | sheepluva |
Wed, 13 Aug 2014 13:41:19 +0200 | |
changeset 10380 | 07ae8fd1d7d4 |
parent 10161 | c092f92aee23 |
child 10462 | dd3cf0c91cc9 |
permissions | -rw-r--r-- |
164 | 1 |
/* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
4976 | 3 |
* Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com> |
9998 | 4 |
* Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com> |
164 | 5 |
* |
184 | 6 |
* This program 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; version 2 of the License |
|
164 | 9 |
* |
184 | 10 |
* This program is distributed in the hope that it will be useful, |
11 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
13 |
* GNU General Public License for more details. |
|
164 | 14 |
* |
184 | 15 |
* You should have received a copy of the GNU General Public License |
16 |
* along with this program; if not, write to the Free Software |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
9998
diff
changeset
|
17 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
164 | 18 |
*/ |
19 |
||
20 |
#ifndef _HWMAP_CONTAINER_INCLUDED |
|
21 |
#define _HWMAP_CONTAINER_INCLUDED |
|
22 |
||
23 |
#include <QWidget> |
|
1209 | 24 |
#include <QGridLayout> |
8377 | 25 |
#include <QVBoxLayout> |
249 | 26 |
#include <QComboBox> |
1802 | 27 |
#include <QLabel> |
4489 | 28 |
#include <QByteArray> |
4519 | 29 |
#include <QLineEdit> |
164 | 30 |
|
6933
78d194a30520
mapContainer: use DataManager, reload maps after data update (e.g. by DLC)
sheepluva
parents:
6700
diff
changeset
|
31 |
#include "DataManager.h" |
78d194a30520
mapContainer: use DataManager, reload maps after data update (e.g. by DLC)
sheepluva
parents:
6700
diff
changeset
|
32 |
|
1210 | 33 |
#include "hwmap.h" |
4520
e7882bd1a894
Allow to draw maps in frontend and play them (only locally, some bugs to fix)
unc0rr
parents:
4519
diff
changeset
|
34 |
#include "drawmapscene.h" |
7258 | 35 |
#include "MapModel.h" |
1210 | 36 |
|
164 | 37 |
class QPushButton; |
1209 | 38 |
class IconedGroupBox; |
5289
9d18b61bd3eb
- Implement ThemesModel (load theme icons once, store in memory, don't reload from disk every time selection changes)
unc0rr
parents:
4976
diff
changeset
|
39 |
class QListView; |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
40 |
class SeparatorPainter; |
8377 | 41 |
class QListWidget; |
164 | 42 |
|
249 | 43 |
class MapFileErrorException |
44 |
{ |
|
45 |
}; |
|
46 |
||
164 | 47 |
class HWMapContainer : public QWidget |
48 |
{ |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
49 |
Q_OBJECT |
320 | 50 |
|
8377 | 51 |
Q_PROPERTY(bool master READ isMaster WRITE setMaster) |
52 |
||
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
53 |
public: |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
54 |
HWMapContainer(QWidget * parent=0); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
55 |
QString getCurrentSeed() const; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
56 |
QString getCurrentMap() const; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
57 |
QString getCurrentTheme() const; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
58 |
int getCurrentHHLimit() const; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
59 |
QString getCurrentScheme() const; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
60 |
QString getCurrentWeapons() const; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
61 |
quint32 getTemplateFilter() const; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
62 |
MapGenerator get_mapgen(void) const; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
63 |
int getMazeSize(void) const; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
64 |
bool getCurrentIsMission() const; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
65 |
QByteArray getDrawnMapData(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
66 |
DrawMapScene * getDrawMapScene(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
67 |
void mapDrawingFinished(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
68 |
QLineEdit* seedEdit; |
8377 | 69 |
bool isMaster(); |
164 | 70 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
71 |
public slots: |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
72 |
void askForGeneratedPreview(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
73 |
void setSeed(const QString & seed); |
10150
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10108
diff
changeset
|
74 |
void setScript(const QString & script); |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
75 |
void setMap(const QString & map); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
76 |
void setTheme(const QString & theme); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
77 |
void setTemplateFilter(int); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
78 |
void setMapgen(MapGenerator m); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
79 |
void setMazeSize(int size); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
80 |
void setDrawnMapData(const QByteArray & ar); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
81 |
void setAllMapParameters(const QString & map, MapGenerator m, int mazesize, const QString & seed, int tmpl); |
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
82 |
void updateModelViews(); |
7008
25563f054ef3
fix a previewmap-related QObject::disconnect segfault
sheepluva
parents:
6960
diff
changeset
|
83 |
void onPreviewMapDestroyed(QObject * map); |
8377 | 84 |
void setMaster(bool master); |
164 | 85 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
86 |
signals: |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
87 |
void seedChanged(const QString & seed); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
88 |
void mapChanged(const QString & map); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
89 |
void themeChanged(const QString & theme); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
90 |
void newTemplateFilter(int filter); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
91 |
void mapgenChanged(MapGenerator m); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
92 |
void mazeSizeChanged(int s); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
93 |
void drawMapRequested(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
94 |
void drawnMapChanged(const QByteArray & data); |
325 | 95 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
96 |
private slots: |
10161 | 97 |
void setImage(const QPixmap & newImage); |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
98 |
void setHHLimit(int hhLimit); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
99 |
void setRandomSeed(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
100 |
void setRandomTheme(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
101 |
void setRandomMap(); |
10161 | 102 |
void addInfoToPreview(const QPixmap & image); |
8377 | 103 |
void setNewSeed(const QString & newSeed); |
104 |
void mapTypeChanged(int); |
|
105 |
void showThemePrompt(); |
|
106 |
void updateTheme(const QModelIndex & current); |
|
107 |
void staticMapChanged(const QModelIndex & map, const QModelIndex & old = QModelIndex()); |
|
108 |
void missionMapChanged(const QModelIndex & map, const QModelIndex & old = QModelIndex()); |
|
109 |
void loadDrawing(); |
|
110 |
void showSeedPrompt(); |
|
8467 | 111 |
void previewClicked(); |
164 | 112 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
113 |
protected: |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
114 |
virtual void resizeEvent ( QResizeEvent * event ); |
9739
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
115 |
virtual void showEvent ( QShowEvent * event ); |
164 | 116 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
117 |
private: |
8377 | 118 |
QVBoxLayout mainLayout; |
8467 | 119 |
QPushButton* mapPreview; |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
120 |
QComboBox* chooseMap; |
8377 | 121 |
MapModel * m_staticMapModel; |
122 |
MapModel * m_missionMapModel; |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
123 |
IconedGroupBox* gbThemes; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
124 |
QListView* lvThemes; |
6937
7f77fa908a4e
messing with the theme model a bit (gets now auto-updated after DLC download too)
sheepluva
parents:
6933
diff
changeset
|
125 |
ThemeModel * m_themeModel; |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
126 |
HWMap* pMap; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
127 |
QString m_seed; |
10150
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10108
diff
changeset
|
128 |
QString m_script; |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
129 |
QPushButton* seedSet; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
130 |
QLabel* seedLabel; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
131 |
int hhLimit; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
132 |
int templateFilter; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
133 |
QPixmap hhSmall; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
134 |
QLabel* lblFilter; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
135 |
QComboBox* cbTemplateFilter; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
136 |
QLabel *maze_size_label; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
137 |
QComboBox *cbMazeSize; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
138 |
MapGenerator mapgen; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
139 |
DrawMapScene drawMapScene; |
8377 | 140 |
QComboBox * cType; |
141 |
QListView * staticMapList; |
|
142 |
QListView * missionMapList; |
|
143 |
QListWidget * generationStyles; |
|
144 |
QListWidget * mazeStyles; |
|
145 |
QLabel * lblMapList; |
|
146 |
QLabel * lblDesc; |
|
147 |
QPushButton * btnTheme; |
|
148 |
QPushButton * btnLoadMap; |
|
149 |
QPushButton * btnEditMap; |
|
150 |
QPushButton * btnRandomize; |
|
151 |
QString selectedTheme; |
|
152 |
QPushButton * btnSeed; |
|
153 |
bool m_master; |
|
154 |
QList<QWidget *> m_childWidgets; |
|
9739
c2c9dd2544b8
make lazy loading of map preview a little bit less of a hack
sheepluva
parents:
9735
diff
changeset
|
155 |
bool m_previewEnabled; |
9744 | 156 |
bool m_missionsViewSetup; |
157 |
bool m_staticViewSetup; |
|
331 | 158 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
159 |
void intSetSeed(const QString & seed); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
160 |
void intSetMap(const QString & map); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
161 |
void intSetMapgen(MapGenerator m); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
162 |
void intSetTemplateFilter(int); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
163 |
void intSetMazeSize(int size); |
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
164 |
void intSetIconlessTheme(const QString & name); |
8377 | 165 |
void mapChanged(const QModelIndex & map, int type, const QModelIndex & old = QModelIndex()); |
166 |
void setMapInfo(MapModel::MapInfo mapInfo); |
|
167 |
void changeMapType(MapModel::MapType type, const QModelIndex & newMap = QModelIndex()); |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6157
diff
changeset
|
168 |
void updatePreview(); |
8393
85bd6c7b2641
Can now change theme for static and mission maps.
dag10 <gottlieb.drew@gmail.com>
parents:
8377
diff
changeset
|
169 |
void updateThemeButtonSize(); |
9744 | 170 |
void setupMissionMapsView(); |
171 |
void setupStaticMapsView(); |
|
6938
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
172 |
|
217ed62e872c
MapModel, various cleanups. TODO/FIXME: QComboBox separator not working with custom models
sheepluva
parents:
6937
diff
changeset
|
173 |
MapModel::MapInfo m_mapInfo; |
8475
f605bc59c603
Initial theme selection is now random. Theme prompt now has a search input and no longer uses FlowLayout. (Resolves issue 520)
dag10
parents:
8467
diff
changeset
|
174 |
int m_themeID; |
6940
211aca8c1f4f
decouple current theme from map theme (fixes theme confusion bugs of last commit)
sheepluva
parents:
6938
diff
changeset
|
175 |
QString m_theme; |
6960
822f8269e13f
map, theme & style selection won't be lost on data updata now (except the selected map/theme/style is deleted ofc). enabling F5 key to reload data :>
sheepluva
parents:
6952
diff
changeset
|
176 |
QString m_curMap; |
7017
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7008
diff
changeset
|
177 |
|
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7008
diff
changeset
|
178 |
QLinearGradient linearGrad; ///< for preview background |
19a434fc91fc
visually indicate when map preview generation is in progress.
sheepluva
parents:
7008
diff
changeset
|
179 |
QSize m_previewSize; |
164 | 180 |
}; |
181 |
||
182 |
#endif // _HWMAP_CONTAINER_INCLUDED |