⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 canvascardwindow.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2002 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "canvascardwindow.h"#include "patiencecardgame.h"#include "freecellcardgame.h"#include "cardmetrics.h"#include <qtopia/resource.h>#include <qapplication.h>#include <qmainwindow.h>#include <qpopupmenu.h>#include <qstyle.h>#include <qlayout.h>enum GameType{    SolitaireGame,    FreecellGame};CanvasCardWindow::CanvasCardWindow(QWidget* parent, const char* name, WFlags f) :    QMainWindow(parent, name, f), resizeTimeout( this, "resizeTimeout" ), canvas(1, 1),    snapOn(TRUE), cardBack(0), gameType(0), drawThree(TRUE), cardGame(0) , resizing( false ){    setCaption( tr("Patience") );    setIcon( Resource::loadPixmap( "cards" ) );    connect( &resizeTimeout, SIGNAL( timeout() ), this, SLOT( doResize() ) );    // Create Playing Area for Games    if ( QPixmap::defaultDepth() < 12 ) {	canvas.setBackgroundColor(QColor(0x08, 0x98, 0x2D));    } else {        QPixmap bg;	bg.convertFromImage( Resource::loadImage( "table_pattern" ), ThresholdDither );          canvas.setBackgroundPixmap(bg);    }#if defined( QT_QWS_CASSIOPEIA )    canvas.setAdvancePeriod(70);#else    canvas.setAdvancePeriod(30);#endif    QMenuBar* menu = menuBar();    QPopupMenu* file = new QPopupMenu;#ifdef _PATIENCE_USE_ACCELS_    file->insertItem(tr("&Patience"), this, SLOT(initPatience()), Key_F2);    file->insertItem(tr("&Freecell"), this, SLOT(initFreecell()), Key_F3);    menu->insertItem(tr("&Play"), file);#else    file->insertItem(tr("Patience"), this, SLOT(initPatience()));    file->insertItem(tr("Freecell"), this, SLOT(initFreecell()));    menu->insertItem(tr("Play"), file);#endif        menu->insertSeparator();    settings = new QPopupMenu;    settings->setCheckable(TRUE);    snapId = settings->insertItem(tr("Snap To Position"), this, SLOT(snapToggle()));    changeId = 0;    drawId = 0;    menu->insertItem(tr("&Settings"),settings);    menu->show();    // Temporary initial QCanvasView until a game is loaded or a new game started    canvasView = new QCanvasView( &canvas, this );    canvasView->setHScrollBarMode(QScrollView::AlwaysOff);    canvasView->setVScrollBarMode(QScrollView::AlwaysOff);    setCentralWidget( canvasView );}CanvasCardWindow::~CanvasCardWindow(){    closeGame();}void CanvasCardWindow::initGame(){{    Config cfg("Patience");    cfg.setGroup( "GlobalSettings" );    snapOn = cfg.readBoolEntry( "SnapOn", TRUE);    settings->setItemChecked(snapId, snapOn);    gameType = cfg.readNumEntry( "GameType", -1 );    drawThree = cfg.readBoolEntry( "DrawThree", TRUE);    cardBack = cfg.readNumEntry( "CardBack", 0 );}    CardMetrics::setCardBack( cardBack );    if ( gameType == 0 ) {	initGame( false, 0 );    } else if ( gameType == 1 ) {	initGame( false, 1 );    } else {	// Probably there isn't a config file or it is broken	// Start a new game	initPatience();    }}void CanvasCardWindow::closeGame(){    if ( cardGame ) {	Config cfg("Patience");	cfg.setGroup( "GlobalSettings" );	cfg.writeEntry( "GameType", gameType );	cfg.writeEntry( "SnapOn", snapOn );	cfg.writeEntry( "DrawThree", drawThree);	cfg.writeEntry( "CardBack", cardBack );	cardGame->writeConfig( cfg );	delete cardGame;	cardGame = 0;	setCentralWidget( canvasView );    }}void CanvasCardWindow::showEvent( QShowEvent * ){    resizeEvent( 0 );}void CanvasCardWindow::resizeEvent( QResizeEvent *re ){    if ( !resizing ) {	closeGame();	resizing = true;    }    QMainWindow::resizeEvent( re );    QWidget *theView = centralWidget();    if ( theView ) {	if ( theView->inherits("QCanvasView") ) {	    QCanvasView *currentView = (QCanvasView*)theView;	    if ( currentView ) {		QSize s = currentView->viewport()->size();		canvas.resize( s.width(), s.height() );	    }	}    }    resizeTimeout.start( 100, TRUE );}void CanvasCardWindow::doResize(){    if ( resizing ) {	QSize s = canvas.size();	QWidget *theView = centralWidget();	if ( theView ) {	    if ( theView->inherits("QCanvasView") ) {		QCanvasView *currentView = (QCanvasView*)theView;		if ( currentView ) {		    s = currentView->viewport()->size();		}	    }	}	CardMetrics::loadMetrics( s.width(), s.height() );	initGame();	canvas.resize( s.width(), s.height() );	resizing = false;    }}void CanvasCardWindow::initGame( bool newGame, int type ){    if ( type == SolitaireGame ) {	if ( !changeId )	    changeId = settings->insertItem(tr("Change Card Backs"), this, SLOT(changeCardBacks()));	if ( !drawId )	    drawId = settings->insertItem(tr("Turn One Card"), this, SLOT(drawnToggle()));    } else {	if ( changeId ) {	    settings->removeItem( changeId );	    changeId = 0;	}	if ( drawId ) {	    settings->removeItem( drawId );	    drawId = 0;	}    }    // Create New Game     if ( newGame && cardGame ) 	delete cardGame;    if ( type == SolitaireGame )        cardGame = new PatienceCardGame( &canvas, snapOn, this );    else	cardGame = new FreecellCardGame( &canvas, snapOn, this );    cardGame->setHScrollBarMode(QScrollView::AlwaysOff);    cardGame->setVScrollBarMode(QScrollView::AlwaysOff);    cardGame->setNumberToDraw(drawThree ? 3 : 1);    gameType = type;    if ( type == SolitaireGame )	setCaption(tr("Patience"));    else	setCaption(tr("Freecell"));    setCentralWidget(cardGame);    if ( newGame )	cardGame->newGame();    else {	Config cfg("Patience");	cfg.setGroup( "GlobalSettings" );	cardGame->readConfig( cfg );    }    setCardBacks();    if ( type == SolitaireGame )	updateDraw();}void CanvasCardWindow::initPatience(){    initGame( true, SolitaireGame );}void CanvasCardWindow::initFreecell(){    initGame( true, FreecellGame );}void CanvasCardWindow::snapToggle(){    snapOn = !snapOn;    settings->setItemChecked(snapId, snapOn);    cardGame->toggleSnap();}void CanvasCardWindow::drawnToggle(){    drawThree = !drawThree;    cardGame->toggleCardsDrawn();    updateDraw();}void CanvasCardWindow::updateDraw(){    if(cardGame->cardsDrawn() == 3) 	settings->changeItem(drawId, tr("Turn One Card"));    else 	settings->changeItem(drawId, tr("Turn Three Cards"));}void CanvasCardWindow::setCardBacks(){    QCanvasItemList l = canvas.allItems();    for (QCanvasItemList::Iterator it = l.begin(); it != l.end(); ++it) {	if ( (*it)->rtti() == canvasCardId )	    ((CanvasCard *)(*it))->cardBackChanged();    }}void CanvasCardWindow::changeCardBacks(){    cardBack++;    if (cardBack == 5)	cardBack = 0;    CardMetrics::setCardBack( cardBack );    setCardBacks();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -