author | kergoth <kergoth> | 2002-01-25 22:14:26 (UTC) |
---|---|---|
committer | kergoth <kergoth> | 2002-01-25 22:14:26 (UTC) |
commit | 15318cad33835e4e2dc620d033e43cd930676cdd (patch) (unidiff) | |
tree | c2fa0399a2c47fda8e2cd0092c73a809d17f68eb /noncore/games/solitaire/canvascardwindow.cpp | |
download | opie-15318cad33835e4e2dc620d033e43cd930676cdd.zip opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.gz opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.bz2 |
Initial revision
Diffstat (limited to 'noncore/games/solitaire/canvascardwindow.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/games/solitaire/canvascardwindow.cpp | 227 |
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 | |||
32 | CanvasCardWindow::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 | |||
131 | CanvasCardWindow::~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 | |||
145 | void 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 | |||
153 | void 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 | |||
169 | void 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 | |||
184 | void CanvasCardWindow::snapToggle() | ||
185 | { | ||
186 | snapOn = !snapOn; | ||
187 | settings->setItemChecked(snap_id, snapOn); | ||
188 | cardGame->toggleSnap(); | ||
189 | } | ||
190 | |||
191 | |||
192 | void CanvasCardWindow::drawnToggle() | ||
193 | { | ||
194 | cardGame->toggleCardsDrawn(); | ||
195 | updateDraw(); | ||
196 | } | ||
197 | |||
198 | void 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 | |||
206 | void 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 | |||
217 | void CanvasCardWindow::changeCardBacks() | ||
218 | { | ||
219 | cardBack++; | ||
220 | |||
221 | if (cardBack == 5) | ||
222 | cardBack = 0; | ||
223 | |||
224 | setCardBacks(); | ||
225 | } | ||
226 | |||
227 | |||