summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/fifteen/fifteen.cpp83
-rw-r--r--noncore/games/fifteen/fifteen.h12
-rw-r--r--noncore/games/fifteen/fifteen.pro4
-rw-r--r--noncore/games/fifteen/main.cpp20
4 files changed, 70 insertions, 49 deletions
diff --git a/noncore/games/fifteen/fifteen.cpp b/noncore/games/fifteen/fifteen.cpp
index 2e4ed94..b4e0308 100644
--- a/noncore/games/fifteen/fifteen.cpp
+++ b/noncore/games/fifteen/fifteen.cpp
@@ -1,364 +1,391 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "fifteen.h" 21#include "fifteen.h"
22 22
23#include <qpe/resource.h> 23#include <qtopia/resource.h>
24#include <qpe/config.h> 24#include <qtopia/config.h>
25 25
26#include <qvbox.h> 26#include <qvbox.h>
27#include <qaction.h> 27#include <qaction.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qpainter.h> 29#include <qpainter.h>
30#include <qpopupmenu.h> 30#include <qpopupmenu.h>
31#include <qmessagebox.h> 31#include <qmessagebox.h>
32#include <qpe/qpetoolbar.h> 32#include <qtoolbar.h>
33#include <qmenubar.h> 33#include <qmenubar.h>
34#include <qstringlist.h> 34#include <qstringlist.h>
35#include <qapplication.h> 35#include <qapplication.h>
36#include <qtoolbutton.h>
36 37
37#include <stdlib.h> 38#include <stdlib.h>
38#include <time.h> 39#include <time.h>
39 40
40FifteenMainWindow::FifteenMainWindow(QWidget *parent, const char* name) 41FifteenMainWindow::FifteenMainWindow(QWidget *parent, const char* name, WFlags fl)
41 : QMainWindow( parent, name ) 42 : QMainWindow( parent, name, fl )
42{ 43{
43 // random seed 44 // random seed
44 srand(time(0)); 45 srand(time(0));
45 46 setCaption( tr("Fifteen Pieces") );
46 setToolBarsMovable( FALSE );
47 QVBox *vbox = new QVBox( this );
48 PiecesTable *table = new PiecesTable( vbox );
49 setCentralWidget(vbox);
50 47
51 QToolBar *toolbar = new QToolBar(this); 48 QToolBar *toolbar = new QToolBar(this);
52 toolbar->setHorizontalStretchable( TRUE ); 49 toolbar->setHorizontalStretchable( FALSE );
53 addToolBar(toolbar);
54
55 QMenuBar *menubar = new QMenuBar( toolbar ); 50 QMenuBar *menubar = new QMenuBar( toolbar );
56 menubar->setMargin(0); 51 menubar->setMargin(0);
57
58 QPopupMenu *game = new QPopupMenu( this ); 52 QPopupMenu *game = new QPopupMenu( this );
59 53
60 QWidget *spacer = new QWidget( toolbar ); 54 QWidget *spacer = new QWidget( toolbar );
61 spacer->setBackgroundMode( PaletteButton ); 55 spacer->setBackgroundMode( PaletteButton );
62 toolbar->setStretchableWidget( spacer ); 56 toolbar->setStretchableWidget( spacer );
63 57
58
59 setToolBarsMovable( FALSE );
60 QVBox *vbox = new QVBox( this );
61 PiecesTable *table = new PiecesTable( vbox );
62 setCentralWidget(vbox);
63
64
65
64 QAction *a = new QAction( tr( "Randomize" ), Resource::loadPixmap( "new" ), 66 QAction *a = new QAction( tr( "Randomize" ), Resource::loadPixmap( "new" ),
65 QString::null, 0, this, 0 ); 67 QString::null, 0, this, 0 );
66 connect( a, SIGNAL( activated() ), table, SLOT( slotRandomize() ) ); 68 connect( a, SIGNAL( activated() ), table, SLOT( slotRandomize() ) );
67 a->addTo( game ); 69 a->addTo( game );
68 a->addTo( toolbar ); 70 a->addTo( toolbar );
69 71
70 a = new QAction( tr( "Solve" ), Resource::loadPixmap( "repeat" ), 72 /* This is pointless and confusing.
73 a = new QAction( tr( "Solve" ), Resource::loadIconSet( "repeat" ),
71 QString::null, 0, this, 0 ); 74 QString::null, 0, this, 0 );
72 connect( a, SIGNAL( activated() ), table, SLOT( slotReset() ) ); 75 connect( a, SIGNAL( activated() ), table, SLOT( slotReset() ) );
73 a->addTo( game ); 76 a->addTo( game );
74 a->addTo( toolbar ); 77 a->addTo( toolbar );
75 78 */
76 menubar->insertItem( tr( "Game" ), game ); 79 menubar->insertItem( tr( "Game" ), game );
77} 80}
78 81
79PiecesTable::PiecesTable(QWidget* parent, const char* name ) 82PiecesTable::PiecesTable(QWidget* parent, const char* name )
80 : QTableView(parent, name), _menu(0), _randomized(false) 83 : QTableView(parent, name), _menu(0), _randomized(false)
81{ 84{
82 // setup table view 85 // setup table view
83 setFrameStyle(StyledPanel | Sunken); 86 setFrameStyle(StyledPanel | Sunken);
84 setBackgroundMode(NoBackground); 87 setBackgroundMode(NoBackground);
85 setMouseTracking(true); 88 setMouseTracking(true);
86 89
87 setNumRows(4); 90 setNumRows(4);
88 setNumCols(4); 91 setNumCols(4);
89 92
90 // init arrays 93 // init arrays
91 initMap(); 94 initMap();
92 readConfig(); 95 readConfig();
93 initColors(); 96 initColors();
94 97
95 // set font 98 // set font
96 QFont f = font(); 99 QFont f = font();
97 f.setPixelSize(18); 100 f.setPixelSize(18);
98 f.setBold( TRUE ); 101 f.setBold( TRUE );
99 setFont(f); 102 setFont(f);
100} 103}
101 104
102PiecesTable::~PiecesTable() 105PiecesTable::~PiecesTable()
103{ 106{
104 writeConfig(); 107 writeConfig();
105} 108}
106 109
107void PiecesTable::writeConfig() 110void PiecesTable::writeConfig()
108{ 111{
109 Config cfg("Fifteen"); 112 Config cfg("Fifteen");
110 cfg.setGroup("Game"); 113 cfg.setGroup("Game");
111 QStringList map; 114 QStringList map;
112 for (unsigned int i = 0; i < 16; i++) 115 for (int i = 0; i < 16; i++)
113 map.append( QString::number( _map[i] ) ); 116 map.append( QString::number( _map[i] ) );
114 cfg.writeEntry("Map", map, '-'); 117 cfg.writeEntry("Map", map, '-');
115 cfg.writeEntry("Randomized", _randomized ); 118 cfg.writeEntry("Randomized", _randomized );
116} 119}
117 120
118void PiecesTable::readConfig() 121void PiecesTable::readConfig()
119{ 122{
120 Config cfg("Fifteen"); 123 Config cfg("Fifteen");
121 cfg.setGroup("Game"); 124 cfg.setGroup("Game");
122 QStringList map = cfg.readListEntry("Map", '-'); 125 QStringList map = cfg.readListEntry("Map", '-');
123 _randomized = cfg.readBoolEntry( "Randomized", FALSE ); 126 _randomized = cfg.readBoolEntry( "Randomized", FALSE );
124 unsigned int i = 0; 127 int i = 0;
125 for ( QStringList::Iterator it = map.begin(); it != map.end(); ++it ) { 128 for ( QStringList::Iterator it = map.begin(); it != map.end(); ++it ) {
126 _map[i] = (*it).toInt(); 129 _map[i] = (*it).toInt();
127 i++; 130 i++;
128 if ( i > 15 ) break; 131 if ( i > 15 ) break;
129 } 132 }
130} 133}
131 134
132void PiecesTable::paintCell(QPainter *p, int row, int col) 135void PiecesTable::paintCell(QPainter *p, int row, int col)
133{ 136{
134 int w = cellWidth(); 137 int w = cellWidth();
135 int h = cellHeight(); 138 int h = cellHeight();
136 int x2 = w - 1; 139 int x2 = w - 1;
137 int y2 = h - 1; 140 int y2 = h - 1;
138 141
139 int number = _map[col + row * numCols()] + 1; 142 int number = _map[col + row * numCols()] + 1;
140 143
141 // draw cell background 144 // draw cell background
142 if(number == 16) 145 if(number == 16)
143 p->setBrush(colorGroup().background()); 146 p->setBrush(colorGroup().background());
144 else 147 else
145 p->setBrush(_colors[number-1]); 148 p->setBrush(_colors[number-1]);
146 p->setPen(NoPen); 149 p->setPen(NoPen);
147 p->drawRect(0, 0, w, h); 150 p->drawRect(0, 0, w, h);
148 151
152 if (number == 16) return;
153
149 // draw borders 154 // draw borders
150 if (height() > 40) { 155 if (height() > 40) {
151 p->setPen(colorGroup().text()); 156 p->setBrush(_colors[number-1].light(130));
152 if(col < numCols()-1) 157 p->drawPolygon(light_border);
153 p->drawLine(x2, 0, x2, y2); // right border line
154 158
155 if(row < numRows()-1) 159 p->setBrush(_colors[number-1].dark(130));
156 p->drawLine(0, y2, x2, y2); // bottom boder line 160 p->drawPolygon(dark_border);
157 } 161 }
158 162
159 // draw number 163 // draw number
160 if (number == 16) return;
161 p->setPen(black); 164 p->setPen(black);
162 p->drawText(0, 0, x2, y2, AlignHCenter | AlignVCenter, QString::number(number)); 165 p->drawText(0, 0, x2, y2, AlignHCenter | AlignVCenter, QString::number(number));
163} 166}
164 167
165void PiecesTable::resizeEvent(QResizeEvent *e) 168void PiecesTable::resizeEvent(QResizeEvent *e)
166{ 169{
167 QTableView::resizeEvent(e); 170 QTableView::resizeEvent(e);
168 171
169 setCellWidth(contentsRect().width()/ numRows()); 172 setCellWidth(contentsRect().width()/ numRows());
170 setCellHeight(contentsRect().height() / numCols()); 173 setCellHeight(contentsRect().height() / numCols());
174
175 //
176 // Calculate 3d-effect borders
177 //
178 intcell_w = cellWidth();
179 intcell_h = cellHeight();
180 int x_offset = cell_w - int(cell_w * 0.9);// 10% should be enough
181 inty_offset = cell_h - int(cell_h * 0.9);
182
183 light_border.setPoints(6,
184 0, 0,
185 cell_w, 0,
186 cell_w - x_offset, y_offset,
187 x_offset, y_offset,
188 x_offset, cell_h - y_offset,
189 0, cell_h);
190
191 dark_border.setPoints(6,
192 cell_w, 0,
193 cell_w, cell_h,
194 0, cell_h,
195 x_offset, cell_h - y_offset,
196 cell_w - x_offset, cell_h - y_offset,
197 cell_w - x_offset, y_offset);
171} 198}
172 199
173void PiecesTable::initColors() 200void PiecesTable::initColors()
174{ 201{
175 _colors.resize(numRows() * numCols()); 202 _colors.resize(numRows() * numCols());
176 for (int r = 0; r < numRows(); r++) 203 for (int r = 0; r < numRows(); r++)
177 for (int c = 0; c < numCols(); c++) 204 for (int c = 0; c < numCols(); c++)
178 _colors[c + r *numCols()] = QColor(255 - 70 * c,255 - 70 * r, 150); 205 _colors[c + r *numCols()] = QColor(255 - 70 * c,255 - 70 * r, 150);
179} 206}
180 207
181void PiecesTable::initMap() 208void PiecesTable::initMap()
182{ 209{
183 _map.resize(16); 210 _map.resize(16);
184 for (unsigned int i = 0; i < 16; i++) 211 for ( int i = 0; i < 16; i++)
185 _map[i] = i; 212 _map[i] = i;
186 213
187 _randomized = false; 214 _randomized = false;
188} 215}
189 216
190void PiecesTable::randomizeMap() 217void PiecesTable::randomizeMap()
191{ 218{
192 initMap(); 219 initMap();
193 _randomized = true; 220 _randomized = true;
194 // find the free position 221 // find the free position
195 int pos = _map.find(15); 222 int pos = _map.find(15);
196 223
197 int move = 0; 224 int move = 0;
198 while ( move < 333 ) { 225 while ( move < 333 ) {
199 226
200 int frow = pos / numCols(); 227 int frow = pos / numCols();
201 int fcol = pos - frow * numCols(); 228 int fcol = pos - frow * numCols();
202 229
203 // find click position 230 // find click position
204 int row = rand()%4; 231 int row = rand()%4;
205 int col = rand()%4; 232 int col = rand()%4;
206 233
207 // sanity check 234 // sanity check
208 if ( row < 0 || row >= numRows() ) continue; 235 if ( row < 0 || row >= numRows() ) continue;
209 if ( col < 0 || col >= numCols() ) continue; 236 if ( col < 0 || col >= numCols() ) continue;
210 if ( row != frow && col != fcol ) continue; 237 if ( row != frow && col != fcol ) continue;
211 238
212 move++; 239 move++;
213 240
214 // rows match -> shift pieces 241 // rows match -> shift pieces
215 if(row == frow) { 242 if(row == frow) {
216 243
217 if (col < fcol) { 244 if (col < fcol) {
218 for(int c = fcol; c > col; c--) { 245 for(int c = fcol; c > col; c--) {
219 _map[c + row * numCols()] = _map[ c-1 + row *numCols()]; 246 _map[c + row * numCols()] = _map[ c-1 + row *numCols()];
220 } 247 }
221 } 248 }
222 else if (col > fcol) { 249 else if (col > fcol) {
223 for(int c = fcol; c < col; c++) { 250 for(int c = fcol; c < col; c++) {
224 _map[c + row * numCols()] = _map[ c+1 + row *numCols()]; 251 _map[c + row * numCols()] = _map[ c+1 + row *numCols()];
225 } 252 }
226 } 253 }
227 } 254 }
228 // cols match -> shift pieces 255 // cols match -> shift pieces
229 else if (col == fcol) { 256 else if (col == fcol) {
230 257
231 if (row < frow) { 258 if (row < frow) {
232 for(int r = frow; r > row; r--) { 259 for(int r = frow; r > row; r--) {
233 _map[col + r * numCols()] = _map[ col + (r-1) *numCols()]; 260 _map[col + r * numCols()] = _map[ col + (r-1) *numCols()];
234 } 261 }
235 } 262 }
236 else if (row > frow) { 263 else if (row > frow) {
237 for(int r = frow; r < row; r++) { 264 for(int r = frow; r < row; r++) {
238 _map[col + r * numCols()] = _map[ col + (r+1) *numCols()]; 265 _map[col + r * numCols()] = _map[ col + (r+1) *numCols()];
239 } 266 }
240 } 267 }
241 } 268 }
242 // move free cell to click position 269 // move free cell to click position
243 _map[pos=(col + row * numCols())] = 15; 270 _map[pos=(col + row * numCols())] = 15;
244 repaint();
245 } 271 }
272 repaint();
246} 273}
247 274
248void PiecesTable::checkwin() 275void PiecesTable::checkwin()
249{ 276{
250 if(!_randomized) return; 277 if(!_randomized) return;
251 278
252 int i; 279 int i;
253 for (i = 0; i < 16; i++) 280 for (i = 0; i < 16; i++)
254 if(i != _map[i]) 281 if(i != _map[i])
255 break; 282 break;
256 283
257 if (i == 16) { 284 if (i == 16) {
258 QMessageBox::information(this, tr("Fifteen Pieces"), 285 QMessageBox::information(this, tr("Fifteen Pieces"),
259 tr("Congratulations!\nYou win the game!")); 286 tr("Congratulations!\nYou win the game!"));
260 _randomized = FALSE; 287 _randomized = FALSE;
261 } 288 }
262 289
263} 290}
264 291
265void PiecesTable::slotRandomize() 292void PiecesTable::slotRandomize()
266{ 293{
267 randomizeMap(); 294 randomizeMap();
268} 295}
269 296
270void PiecesTable::slotReset() 297void PiecesTable::slotReset()
271{ 298{
272 initMap(); 299 initMap();
273 repaint(); 300 repaint();
274} 301}
275 302
276void PiecesTable::mousePressEvent(QMouseEvent* e) 303void PiecesTable::mousePressEvent(QMouseEvent* e)
277{ 304{
278 QTableView::mousePressEvent(e); 305 QTableView::mousePressEvent(e);
279 306
280 if (e->button() == RightButton) { 307 if (e->button() == RightButton) {
281 308
282 // setup RMB pupup menu 309 // setup RMB pupup menu
283 if(!_menu) { 310 if(!_menu) {
284 _menu = new QPopupMenu(this); 311 _menu = new QPopupMenu(this);
285 _menu->insertItem(tr("R&andomize Pieces"), mRandomize); 312 _menu->insertItem(tr("R&andomize Pieces"), mRandomize);
286 _menu->insertItem(tr("&Reset Pieces"), mReset); 313 _menu->insertItem(tr("&Reset Pieces"), mReset);
287 _menu->adjustSize(); 314 _menu->adjustSize();
288 } 315 }
289 316
290 // execute RMB popup and check result 317 // execute RMB popup and check result
291 switch(_menu->exec(mapToGlobal(e->pos()))) { 318 switch(_menu->exec(mapToGlobal(e->pos()))) {
292 case mRandomize: 319 case mRandomize:
293 randomizeMap(); 320 randomizeMap();
294 break; 321 break;
295 case mReset: 322 case mReset:
296 initMap(); 323 initMap();
297 repaint(); 324 repaint();
298 break; 325 break;
299 default: 326 default:
300 break; 327 break;
301 } 328 }
302 } 329 }
303 else { 330 else {
304 // GAME LOGIC 331 // GAME LOGIC
305 332
306 // find the free position 333 // find the free position
307 int pos = _map.find(15); 334 int pos = _map.find(15);
308 if(pos < 0) return; 335 if(pos < 0) return;
309 336
310 int frow = pos / numCols(); 337 int frow = pos / numCols();
311 int fcol = pos - frow * numCols(); 338 int fcol = pos - frow * numCols();
312 339
313 // find click position 340 // find click position
314 int row = findRow(e->y()); 341 int row = findRow(e->y());
315 int col = findCol(e->x()); 342 int col = findCol(e->x());
316 343
317 // sanity check 344 // sanity check
318 if (row < 0 || row >= numRows()) return; 345 if (row < 0 || row >= numRows()) return;
319 if (col < 0 || col >= numCols()) return; 346 if (col < 0 || col >= numCols()) return;
320 if ( row != frow && col != fcol ) return; 347 if ( row != frow && col != fcol ) return;
321 348
322 // valid move? 349 // valid move?
323 if(row != frow && col != fcol) return; 350 if(row != frow && col != fcol) return;
324 351
325 // rows match -> shift pieces 352 // rows match -> shift pieces
326 if(row == frow) { 353 if(row == frow) {
327 354
328 if (col < fcol) { 355 if (col < fcol) {
329 for(int c = fcol; c > col; c--) { 356 for(int c = fcol; c > col; c--) {
330 _map[c + row * numCols()] = _map[ c-1 + row *numCols()]; 357 _map[c + row * numCols()] = _map[ c-1 + row *numCols()];
331 updateCell(row, c, false); 358 updateCell(row, c, false);
332 } 359 }
333 } 360 }
334 else if (col > fcol) { 361 else if (col > fcol) {
335 for(int c = fcol; c < col; c++) { 362 for(int c = fcol; c < col; c++) {
336 _map[c + row * numCols()] = _map[ c+1 + row *numCols()]; 363 _map[c + row * numCols()] = _map[ c+1 + row *numCols()];
337 updateCell(row, c, false); 364 updateCell(row, c, false);
338 } 365 }
339 } 366 }
340 } 367 }
341 // cols match -> shift pieces 368 // cols match -> shift pieces
342 else if (col == fcol) { 369 else if (col == fcol) {
343 370
344 if (row < frow) { 371 if (row < frow) {
345 for(int r = frow; r > row; r--) { 372 for(int r = frow; r > row; r--) {
346 _map[col + r * numCols()] = _map[ col + (r-1) *numCols()]; 373 _map[col + r * numCols()] = _map[ col + (r-1) *numCols()];
347 updateCell(r, col, false); 374 updateCell(r, col, false);
348 } 375 }
349 } 376 }
350 else if (row > frow) { 377 else if (row > frow) {
351 for(int r = frow; r < row; r++) { 378 for(int r = frow; r < row; r++) {
352 _map[col + r * numCols()] = _map[ col + (r+1) *numCols()]; 379 _map[col + r * numCols()] = _map[ col + (r+1) *numCols()];
353 updateCell(r, col, false); 380 updateCell(r, col, false);
354 } 381 }
355 } 382 }
356 } 383 }
357 // move free cell to click position 384 // move free cell to click position
358 _map[col + row * numCols()] = 15; 385 _map[col + row * numCols()] = 15;
359 updateCell(row, col, false); 386 updateCell(row, col, false);
360 387
361 // check if the player wins with this move 388 // check if the player wins with this move
362 checkwin(); 389 checkwin();
363 } 390 }
364} 391}
diff --git a/noncore/games/fifteen/fifteen.h b/noncore/games/fifteen/fifteen.h
index 703a8a7..58eb756 100644
--- a/noncore/games/fifteen/fifteen.h
+++ b/noncore/games/fifteen/fifteen.h
@@ -1,83 +1,89 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#ifndef __fifteenapplet_h__ 21#ifndef __fifteenapplet_h__
22#define __fifteenapplet_h__ 22#define __fifteenapplet_h__
23 23
24#include <qmainwindow.h> 24#include <qmainwindow.h>
25#include <qtableview.h> 25#include <qtableview.h>
26#include <qarray.h> 26#include <qarray.h>
27#include <qpointarray.h>
27 28
28class QPopupMenu; 29class QPopupMenu;
29 30
30class PiecesTable : public QTableView 31class PiecesTable : public QTableView
31{ 32{
32 Q_OBJECT 33 Q_OBJECT
33 34
34 public: 35 public:
35 PiecesTable(QWidget* parent = 0, const char* name = 0); 36 PiecesTable(QWidget* parent = 0, const char* name = 0);
36 ~PiecesTable(); 37 ~PiecesTable();
37 38
38 protected slots: 39 protected slots:
39 void slotRandomize(); 40 void slotRandomize();
40 void slotReset(); 41 void slotReset();
41 42
42 protected: 43 protected:
43 void resizeEvent(QResizeEvent*); 44 void resizeEvent(QResizeEvent*);
44 void mousePressEvent(QMouseEvent*); 45 void mousePressEvent(QMouseEvent*);
45 46
46 void paintCell(QPainter *, int row, int col); 47 void paintCell(QPainter *, int row, int col);
47 48
48 void initMap(); 49 void initMap();
49 void initColors(); 50 void initColors();
50 void randomizeMap(); 51 void randomizeMap();
51 void checkwin(); 52 void checkwin();
52 void readConfig(); 53 void readConfig();
53 void writeConfig(); 54 void writeConfig();
54 55
55 private: 56 private:
56 QArray<int> _map; 57 QArray<int> _map;
57 QArray<QColor> _colors; 58 QArray<QColor> _colors;
58 QPopupMenu *_menu; 59 QPopupMenu *_menu;
59 bool _randomized; 60 bool _randomized;
61 QPointArraylight_border;
62 QPointArraydark_border;
60 63
61 enum MenuOp { mRandomize = 1, mReset = 2 }; 64 enum MenuOp { mRandomize = 1, mReset = 2 };
62}; 65};
63 66
64class FifteenWidget : public QWidget 67class FifteenWidget : public QWidget
65{ 68{
66 Q_OBJECT 69 Q_OBJECT
67 70
68public: 71public:
69 FifteenWidget(QWidget *parent = 0, const char *name = 0); 72 FifteenWidget(QWidget *parent = 0, const char *name = 0);
70 73
71private: 74private:
72 PiecesTable *_table; 75 PiecesTable *_table;
73}; 76};
74 77
75class FifteenMainWindow : public QMainWindow 78class FifteenMainWindow : public QMainWindow
76{ 79{
77 Q_OBJECT 80 Q_OBJECT
78 81
79public: 82public:
80 FifteenMainWindow(QWidget *parent=0, const char* name=0); 83 static QString appName() {
84 return QString::fromLatin1("fifteen");
85 }
86 FifteenMainWindow(QWidget *parent=0, const char* name=0, WFlags fl=0);
81}; 87};
82 88
83#endif 89#endif
diff --git a/noncore/games/fifteen/fifteen.pro b/noncore/games/fifteen/fifteen.pro
index 43d336d..14ea3c9 100644
--- a/noncore/games/fifteen/fifteen.pro
+++ b/noncore/games/fifteen/fifteen.pro
@@ -1,12 +1,10 @@
1 DESTDIR = $(OPIEDIR)/bin 1 CONFIG = qt warn_on release quick-app
2 TEMPLATE= app
3 CONFIG = qt warn_on release
4 HEADERS = fifteen.h 2 HEADERS = fifteen.h
5 SOURCES = fifteen.cpp \ 3 SOURCES = fifteen.cpp \
6 main.cpp 4 main.cpp
7INCLUDEPATH += $(OPIEDIR)/include 5INCLUDEPATH += $(OPIEDIR)/include
8 DEPENDPATH+= $(OPIEDIR)/include 6 DEPENDPATH+= $(OPIEDIR)/include
9LIBS += -lqpe 7LIBS += -lqpe
10 TARGET = fifteen 8 TARGET = fifteen
11 9
12include ( $(OPIEDIR)/include.pro ) 10include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/games/fifteen/main.cpp b/noncore/games/fifteen/main.cpp
index 4838a36..74a7368 100644
--- a/noncore/games/fifteen/main.cpp
+++ b/noncore/games/fifteen/main.cpp
@@ -1,33 +1,23 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2004 Holger Freyther. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/ 16**********************************************************************/
20 17
21#include "fifteen.h" 18#include "fifteen.h"
22 19
23#include <qpe/qpeapplication.h> 20#include <opie/oapplicationfactory.h>
21
22OPIE_EXPORT_APP( OApplicationFactory<FifteenMainWindow> )
24 23
25int main( int argc, char ** argv)
26{
27 QPEApplication app( argc, argv );
28
29 FifteenMainWindow mw;
30 mw.setCaption( FifteenMainWindow::tr("Fifteen Pieces") );
31 app.showMainWidget( &mw );
32 return app.exec();
33}