Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

canvascardwindow.cpp

Go to the documentation of this file.
00001 /**********************************************************************
00002 ** Copyright (C) 2000 Trolltech AS.  All rights reserved.
00003 **
00004 ** This file is part of Qtopia Environment.
00005 **
00006 ** This file may be distributed and/or modified under the terms of the
00007 ** GNU General Public License version 2 as published by the Free Software
00008 ** Foundation and appearing in the file LICENSE.GPL included in the
00009 ** packaging of this file.
00010 **
00011 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
00012 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00013 **
00014 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
00015 **
00016 ** Contact info@trolltech.com if any conditions of this licensing are
00017 ** not clear to you.
00018 **
00019 **********************************************************************/
00020 
00021 #include "canvascardwindow.h"
00022 #include "freecellcardgame.h"
00023 #include "chicanecardgame.h"
00024 #include "harpcardgame.h"
00025 #include "teeclubcardgame.h"
00026 
00027 #include <opie2/oresource.h>
00028 
00029 CanvasCardWindow::CanvasCardWindow(QWidget* parent, const char* name, WFlags f) :
00030     QMainWindow(parent, name, f), canvas(230, 260), snapOn(TRUE), cardBack(4), gameType(0),
00031     cardGame(NULL)
00032 {
00033     setIcon( Opie::Core::OResource::loadPixmap( "cards" ) );
00034     setCaption(tr("Patience"));
00035 
00036     // Create Playing Area for Games
00037     if ( QPixmap::defaultDepth() < 12 ) {
00038 //      canvas.setBackgroundColor(QColor(0x51, 0x74, 0x6B));
00039 //  canvas.setBackgroundColor(QColor(0x20, 0xb0, 0x50));
00040   canvas.setBackgroundColor(QColor(0x08, 0x98, 0x2D));
00041     } else {
00042         QPixmap bg;
00043   bg.convertFromImage( Opie::Core::OResource::loadImage( "table_pattern" ), ThresholdDither );
00044         canvas.setBackgroundPixmap(bg);
00045     }
00046 
00047 #if defined( QT_QWS_CASSIOPEIA )
00048     canvas.setAdvancePeriod(70);
00049 #else
00050     canvas.setAdvancePeriod(30);
00051 #endif
00052 
00053 
00054 #ifdef _PATIENCE_USE_ACCELS_
00055     QMenuBar* menu = menuBar();
00056 
00057     QPopupMenu* file = new QPopupMenu;
00058     file->insertItem(tr("Patience"), this, SLOT(initPatience()), CTRL+Key_F);
00059     file->insertItem(tr("Freecell"), this, SLOT(initFreecell()), CTRL+Key_F);
00060     file->insertItem(tr("Chicane"), this, SLOT(initChicane()), CTRL+Key_F);
00061     file->insertItem(tr("Harp"), this, SLOT(initHarp()), CTRL+Key_F);
00062     file->insertItem(tr("Teeclub"), this, SLOT(initTeeclub()), CTRL+Key_F);
00063     menu->insertItem(tr("&Game"), file);
00064 
00065     menu->insertSeparator();
00066 
00067     settings = new QPopupMenu;
00068     settings->insertItem(tr("&Change card backs"), this, SLOT(changeCardBacks()), Key_F2);
00069     snap_id = settings->insertItem(tr("&Snap to position"), this, SLOT(snapToggle()), Key_F3);
00070     settings->setCheckable(TRUE);
00071     menu->insertItem(tr("&Settings"),settings);
00072 
00073     menu->insertSeparator();
00074 
00075     QPopupMenu* help = new QPopupMenu;
00076     help->insertItem(tr("&About"), this, SLOT(help()), Key_F1);
00077     help->setItemChecked(dbf_id, TRUE);
00078     menu->insertItem(tr("&Help"),help);
00079 #else
00080     QMenuBar* menu = menuBar();
00081 
00082     QPopupMenu* file = new QPopupMenu;
00083     file->insertItem(tr("Patience"), this, SLOT(initPatience()));
00084     file->insertItem(tr("Freecell"), this, SLOT(initFreecell()));
00085     file->insertItem(tr("Chicane"), this, SLOT(initChicane()));
00086     file->insertItem(tr("Harp"), this, SLOT(initHarp()));
00087     file->insertItem(tr("Teeclub"), this, SLOT(initTeeclub()));
00088     menu->insertItem(tr("Play"), file);
00089 
00090     menu->insertSeparator();
00091 
00092     settings = new QPopupMenu;
00093     settings->setCheckable(TRUE);
00094     settings->insertItem(tr("Change card backs"), this, SLOT(changeCardBacks()));
00095     snap_id = settings->insertItem(tr("Snap to position"), this, SLOT(snapToggle()));
00096     QString m;
00097 
00098     drawId = settings->insertItem(tr("Turn one card"), this, SLOT(drawnToggle()));
00099     menu->insertItem(tr("Settings"),settings);
00100     settings->setCheckable(TRUE);
00101 
00102 #endif
00103 
00104     menu->show();
00105 
00106     Config cfg( "Patience" );
00107     cfg.setGroup( "GlobalSettings" );
00108     snapOn = cfg.readBoolEntry( "SnapOn", TRUE);
00109     settings->setItemChecked(snap_id, snapOn);
00110 
00111     gameType = cfg.readNumEntry( "GameType", -1 );
00112     drawThree = cfg.readBoolEntry( "DrawThree", FALSE);
00113     if ( gameType == 0 ) {
00114   cardGame = new PatienceCardGame( &canvas, snapOn, this );
00115   cardGame->setNumberToDraw(drawThree ? 3 : 1);
00116 
00117   setCaption(tr("Patience"));
00118   setCentralWidget(cardGame);
00119   cardGame->readConfig( cfg );
00120   setCardBacks();
00121     } else if ( gameType == 1 ) {
00122   cardGame = new FreecellCardGame( &canvas, snapOn, this );
00123   setCaption(tr("Freecell"));
00124   setCentralWidget(cardGame);
00125   //cardGame->newGame(); // Until we know how to handle reading freecell config
00126   cardGame->readConfig( cfg );
00127   setCardBacks();
00128     } else if ( gameType == 2 ) {
00129   cardGame = new ChicaneCardGame( &canvas, snapOn, this );
00130   cardGame->setNumberToDraw(1);
00131   setCaption(tr("Chicane"));
00132   setCentralWidget(cardGame);
00133   cardGame->readConfig( cfg );
00134   setCardBacks();
00135     } else if ( gameType == 3 ) {
00136   cardGame = new HarpCardGame( &canvas, snapOn, this );
00137   cardGame->setNumberToDraw(1);
00138   setCaption(tr("Harp"));
00139   setCentralWidget(cardGame);
00140   cardGame->readConfig( cfg );
00141   setCardBacks();
00142     } else if ( gameType == 4 ) {
00143   cardGame = new TeeclubCardGame( &canvas, snapOn, this );
00144   cardGame->setNumberToDraw(1);
00145   setCaption(tr("Teeclub"));
00146   setCentralWidget(cardGame);
00147   cardGame->readConfig( cfg );
00148   setCardBacks();
00149     } else {
00150   // Probably there isn't a config file or it is broken
00151   // Start a new game
00152   initPatience();
00153     }
00154 
00155     updateDraw();
00156 }
00157 
00158 
00159 CanvasCardWindow::~CanvasCardWindow()
00160 {
00161     if (cardGame) {
00162   Config cfg("Patience");
00163   cfg.setGroup( "GlobalSettings" );
00164   cfg.writeEntry( "GameType", gameType );
00165   cfg.writeEntry( "SnapOn", snapOn );
00166   cfg.writeEntry( "DrawThree", drawThree);
00167   cfg.write();
00168   cardGame->writeConfig( cfg );
00169   delete cardGame;
00170     }
00171 }
00172 
00173 
00174 void CanvasCardWindow::resizeEvent(QResizeEvent *)
00175 {
00176     QSize s = centralWidget()->size();
00177     int fw = style().defaultFrameWidth();
00178     canvas.resize( s.width() - fw - 2, s.height() - fw - 2);
00179 }
00180 
00181 
00182 void CanvasCardWindow::initPatience()
00183 {
00184     // Create New Game
00185     if ( cardGame )
00186   delete cardGame;
00187     cardGame = new PatienceCardGame( &canvas, snapOn, this );
00188     cardGame->setNumberToDraw(drawThree ? 3 : 1);
00189     gameType = 0;
00190     setCaption(tr("Patience"));
00191     setCentralWidget(cardGame);
00192     cardGame->newGame();
00193     setCardBacks();
00194     updateDraw();
00195 }
00196 
00197 
00198 void CanvasCardWindow::initFreecell()
00199 {
00200     // Create New Game
00201     if ( cardGame ) {
00202   delete cardGame;
00203     }
00204     cardGame = new FreecellCardGame( &canvas, snapOn, this );
00205     gameType = 1;
00206     setCaption(tr("Freecell"));
00207     setCentralWidget(cardGame);
00208     cardGame->newGame();
00209     setCardBacks();
00210 }
00211 
00212 
00213 void CanvasCardWindow::initChicane()
00214 {
00215     // Create New Game
00216     if ( cardGame ) {
00217   delete cardGame;
00218     }
00219     cardGame = new ChicaneCardGame( &canvas, snapOn, this );
00220     cardGame->setNumberToDraw(1);
00221     gameType = 2;
00222     setCaption(tr("Chicane"));
00223     setCentralWidget(cardGame);
00224     cardGame->newGame();
00225     setCardBacks();
00226 }
00227 
00228 void CanvasCardWindow::initHarp()
00229 {
00230     // Create New Game
00231     if ( cardGame ) {
00232   delete cardGame;
00233     }
00234     cardGame = new HarpCardGame( &canvas, snapOn, this );
00235     cardGame->setNumberToDraw(1);
00236     gameType = 3;
00237     setCaption(tr("Harp"));
00238     setCentralWidget(cardGame);
00239     cardGame->newGame();
00240     setCardBacks();
00241 }
00242 
00243 
00244 void CanvasCardWindow::initTeeclub()
00245 {
00246     // Create New Game
00247     if ( cardGame ) {
00248         delete cardGame;
00249     }
00250     cardGame = new TeeclubCardGame( &canvas, snapOn, this );
00251     cardGame->setNumberToDraw(1);
00252     gameType = 4;
00253     setCaption(tr("Teeclub"));
00254     setCentralWidget(cardGame);
00255     cardGame->newGame();
00256     setCardBacks();
00257 }
00258 
00259 
00260 void CanvasCardWindow::snapToggle()
00261 {
00262     snapOn = !snapOn;
00263     settings->setItemChecked(snap_id, snapOn);
00264     cardGame->toggleSnap();
00265 }
00266 
00267 
00268 void CanvasCardWindow::drawnToggle()
00269 {
00270     drawThree=!drawThree;
00271     Config cfg( "Patience" );
00272     cfg.setGroup( "GlobalSettings" );
00273     cardGame->toggleCardsDrawn();
00274     updateDraw();
00275     cfg.writeEntry( "DrawThree", drawThree);
00276     cfg.write();
00277 }
00278 
00279 void CanvasCardWindow::updateDraw() {
00280     if(cardGame->cardsDrawn() == 3){
00281         settings->changeItem(drawId, tr("Turn one card"));
00282     }  else {
00283         settings->changeItem(drawId, tr("Turn three cards"));
00284     }
00285 }
00286 
00287 
00288 void CanvasCardWindow::setCardBacks()
00289 {
00290     QCanvasItemList l = canvas.allItems();
00291 
00292     for (QCanvasItemList::Iterator it = l.begin(); it != l.end(); ++it) {
00293   if ( (*it)->rtti() == canvasCardId )
00294       ((CanvasCard *)(*it))->setCardBack( cardBack );
00295     }
00296 }
00297 
00298 
00299 void CanvasCardWindow::changeCardBacks()
00300 {
00301     cardBack++;
00302 
00303     if (cardBack == 5)
00304   cardBack = 0;
00305 
00306     setCardBacks();
00307 }
00308 
00309 

Generated on Sat Nov 5 16:17:25 2005 for OPIE by  doxygen 1.4.2