summaryrefslogtreecommitdiff
path: root/noncore/games/solitaire/canvascardwindow.cpp
Unidiff
Diffstat (limited to 'noncore/games/solitaire/canvascardwindow.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/games/solitaire/canvascardwindow.cpp227
1 files changed, 227 insertions, 0 deletions
diff --git a/noncore/games/solitaire/canvascardwindow.cpp b/noncore/games/solitaire/canvascardwindow.cpp
new file mode 100644
index 0000000..4c365a5
--- a/dev/null
+++ b/noncore/games/solitaire/canvascardwindow.cpp
@@ -0,0 +1,227 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
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
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
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.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21#include "canvascardwindow.h"
22#include "patiencecardgame.h"
23#include "freecellcardgame.h"
24
25#include <qpe/resource.h>
26
27#include <qmainwindow.h>
28#include <qpopupmenu.h>
29#include <qstyle.h>
30
31
32CanvasCardWindow::CanvasCardWindow(QWidget* parent, const char* name, WFlags f) :
33 QMainWindow(parent, name, f), canvas(230, 260), snapOn(TRUE), cardBack(4), gameType(0),
34 cardGame(NULL)
35{
36 setIcon( Resource::loadPixmap( "cards" ) );
37
38 // Create Playing Area for Games
39 if ( QPixmap::defaultDepth() < 12 ) {
40// canvas.setBackgroundColor(QColor(0x51, 0x74, 0x6B));
41 //canvas.setBackgroundColor(QColor(0x20, 0xb0, 0x50));
42 canvas.setBackgroundColor(QColor(0x08, 0x98, 0x2D));
43 } else {
44 QPixmap bg;
45 bg.convertFromImage( Resource::loadImage( "table_pattern" ), ThresholdDither );
46 canvas.setBackgroundPixmap(bg);
47 }
48
49#if defined( QT_QWS_CASSIOPEIA )
50 canvas.setAdvancePeriod(70);
51#else
52 canvas.setAdvancePeriod(30);
53#endif
54
55
56#ifdef _PATIENCE_USE_ACCELS_
57 QPEMenuBar* menu = menuBar();
58
59 QPopupMenu* file = new QPopupMenu;
60 file->insertItem(tr("Patience"), this, SLOT(initPatience()), CTRL+Key_F);
61 file->insertItem(tr("Freecell"), this, SLOT(initFreecell()), CTRL+Key_F);
62 menu->insertItem(tr("&Game"), file);
63
64 menu->insertSeparator();
65
66 settings = new QPopupMenu;
67 settings->insertItem(tr("&Change Card Backs"), this, SLOT(changeCardBacks()), Key_F2);
68 snap_id = settings->insertItem(tr("&Snap To Position"), this, SLOT(snapToggle()), Key_F3);
69 settings->setCheckable(TRUE);
70 menu->insertItem(tr("&Settings"),settings);
71
72 menu->insertSeparator();
73
74 QPopupMenu* help = new QPopupMenu;
75 help->insertItem(tr("&About"), this, SLOT(help()), Key_F1);
76 help->setItemChecked(dbf_id, TRUE);
77 menu->insertItem(tr("&Help"),help);
78#else
79 QMenuBar* menu = menuBar();
80
81 QPopupMenu* file = new QPopupMenu;
82 file->insertItem(tr("Patience"), this, SLOT(initPatience()));
83 file->insertItem(tr("Freecell"), this, SLOT(initFreecell()));
84 menu->insertItem(tr("Play"), file);
85
86 menu->insertSeparator();
87
88 settings = new QPopupMenu;
89 settings->setCheckable(TRUE);
90 settings->insertItem(tr("Change Card Backs"), this, SLOT(changeCardBacks()));
91 snap_id = settings->insertItem(tr("Snap To Position"), this, SLOT(snapToggle()));
92 QString m;
93
94 drawId = settings->insertItem(tr("Turn One Card"), this, SLOT(drawnToggle()));
95 menu->insertItem(tr("Settings"),settings);
96
97#endif
98
99 menu->show();
100
101 Config cfg( "Patience" );
102 cfg.setGroup( "GlobalSettings" );
103 snapOn = cfg.readBoolEntry( "SnapOn", TRUE);
104 settings->setItemChecked(snap_id, snapOn);
105 gameType = cfg.readNumEntry( "GameType", -1 );
106 drawThree = cfg.readBoolEntry( "DrawThree", TRUE);
107 if ( gameType == 0 ) {
108 cardGame = new PatienceCardGame( &canvas, snapOn, this );
109 cardGame->setNumberToDraw(drawThree ? 3 : 1);
110 setCaption(tr("Patience"));
111 setCentralWidget(cardGame);
112 cardGame->readConfig( cfg );
113 setCardBacks();
114 } else if ( gameType == 1 ) {
115 cardGame = new FreecellCardGame( &canvas, snapOn, this );
116 setCaption(tr("Freecell"));
117 setCentralWidget(cardGame);
118 //cardGame->newGame(); // Until we know how to handle reading freecell config
119 cardGame->readConfig( cfg );
120 setCardBacks();
121 } else {
122 // Probably there isn't a config file or it is broken
123 // Start a new game
124 initPatience();
125 }
126
127 updateDraw();
128}
129
130
131CanvasCardWindow::~CanvasCardWindow()
132{
133 if (cardGame) {
134 Config cfg("Patience");
135 cfg.setGroup( "GlobalSettings" );
136 cfg.writeEntry( "GameType", gameType );
137 cfg.writeEntry( "SnapOn", snapOn );
138 cfg.writeEntry( "DrawThree", drawThree);
139 cardGame->writeConfig( cfg );
140 delete cardGame;
141 }
142}
143
144
145void CanvasCardWindow::resizeEvent(QResizeEvent *)
146{
147 QSize s = centralWidget()->size();
148 int fw = style().defaultFrameWidth();
149 canvas.resize( s.width() - fw - 2, s.height() - fw - 2);
150}
151
152
153void CanvasCardWindow::initPatience()
154{
155 // Create New Game
156 if ( cardGame )
157 delete cardGame;
158 cardGame = new PatienceCardGame( &canvas, snapOn, this );
159 cardGame->setNumberToDraw(drawThree ? 3 : 1);
160 gameType = 0;
161 setCaption(tr("Patience"));
162 setCentralWidget(cardGame);
163 cardGame->newGame();
164 setCardBacks();
165 updateDraw();
166}
167
168
169void CanvasCardWindow::initFreecell()
170{
171 // Create New Game
172 if ( cardGame ) {
173 delete cardGame;
174 }
175 cardGame = new FreecellCardGame( &canvas, snapOn, this );
176 gameType = 1;
177 setCaption(tr("Freecell"));
178 setCentralWidget(cardGame);
179 cardGame->newGame();
180 setCardBacks();
181}
182
183
184void CanvasCardWindow::snapToggle()
185{
186 snapOn = !snapOn;
187 settings->setItemChecked(snap_id, snapOn);
188 cardGame->toggleSnap();
189}
190
191
192void CanvasCardWindow::drawnToggle()
193{
194 cardGame->toggleCardsDrawn();
195 updateDraw();
196}
197
198void CanvasCardWindow::updateDraw() {
199 if(cardGame->cardsDrawn() == 3)
200 settings->changeItem(drawId, tr("Turn One Card"));
201 else
202 settings->changeItem(drawId, tr("Turn Three Cards"));
203}
204
205
206void CanvasCardWindow::setCardBacks()
207{
208 QCanvasItemList l = canvas.allItems();
209
210 for (QCanvasItemList::Iterator it = l.begin(); it != l.end(); ++it) {
211 if ( (*it)->rtti() == canvasCardId )
212 ((CanvasCard *)(*it))->setCardBack( cardBack );
213 }
214}
215
216
217void CanvasCardWindow::changeCardBacks()
218{
219 cardBack++;
220
221 if (cardBack == 5)
222 cardBack = 0;
223
224 setCardBacks();
225}
226
227