-rw-r--r-- | noncore/games/kpacman/config.cpp | 394 | ||||
-rw-r--r-- | noncore/games/kpacman/config.h | 74 | ||||
-rw-r--r-- | noncore/games/kpacman/keys.cpp | 4 | ||||
-rw-r--r-- | noncore/games/kpacman/kpacman.cpp | 18 | ||||
-rw-r--r-- | noncore/games/kpacman/kpacman.pro | 2 | ||||
-rw-r--r-- | noncore/games/kpacman/kpacmanwidget.cpp | 2 | ||||
-rw-r--r-- | noncore/games/kpacman/painter.cpp | 2 | ||||
-rw-r--r-- | noncore/games/kpacman/referee.cpp | 2 | ||||
-rw-r--r-- | noncore/games/kpacman/status.cpp | 4 |
9 files changed, 19 insertions, 483 deletions
diff --git a/noncore/games/kpacman/config.cpp b/noncore/games/kpacman/config.cpp deleted file mode 100644 index b9e3607..0000000 --- a/noncore/games/kpacman/config.cpp +++ b/dev/null @@ -1,394 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qt Palmtop 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. -** -** $Id$ -** -**********************************************************************/ - -#include "config.h" - -#include <qfile.h> -#include <qdir.h> -#include <qfileinfo.h> -#include <qtextstream.h> -#if QT_VERSION <= 230 && defined(QT_NO_CODECS) -#include <qtextcodec.h> -#endif -#include <stdlib.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <fcntl.h> -#include <unistd.h> - -/*! - \internal -*/ -QString Config::configFilename(const QString& name, Domain d) -{ - switch (d) { - case File: - return name; - case User: { - QDir dir = (QString(getenv("HOME")) + "/Settings"); - if ( !dir.exists() ) - mkdir(dir.path().local8Bit(),0700); - return dir.path() + "/" + name + ".conf"; - } - } - return name; -} - -/*! - \class Config config.h - \brief The Config class provides for saving application cofniguration state. - - You should keep a Config in existence only while you do not want others - to be able to change the state. There is no locking currently, but there - may be in the future. -*/ - -/*! - \enum Config::ConfigGroup - \internal -*/ - -/*! - \enum Config::Domain - - \value File - \value User - - See Config for details. -*/ - -/*! - Constructs a config that will load or create a configuration with the - given \a name in the given \a domain. - - You must call setGroup() before doing much else with the Config. - - In the default Domain, \e User, - the configuration is user-specific. \a name should not contain "/" in - this case, and in general should be the name of the C++ class that is - primarily responsible for maintaining the configuration. - - In the File Domain, \a name is an absolute filename. -*/ -Config::Config( const QString &name, Domain domain ) - : filename( configFilename(name,domain) ) -{ - git = groups.end(); - read(); - - lang = getenv("LANG"); - int i = lang.find("."); - if ( i > 0 ) - lang = lang.left( i ); - i = lang.find( "_" ); - if ( i > 0 ) - glang = lang.left(i); -} - -/*! - Writes any changes to disk and destroys the in-memory object. -*/ -Config::~Config() -{ - if ( changed ) - write(); -} - -/*! - Returns whether the current group has an entry called \a key. -*/ -bool Config::hasKey( const QString &key ) const -{ - if ( groups.end() == git ) - return FALSE; - ConfigGroup::ConstIterator it = ( *git ).find( key ); - return it != ( *git ).end(); -} - -/*! - Sets the current group for subsequent reading and writing of - entries to \a gname. Grouping allows the application to partition the namespace. - - This function must be called prior to any reading or writing - of entries. - - The \a gname must not be empty. -*/ -void Config::setGroup( const QString &gname ) -{ - QMap< QString, ConfigGroup>::Iterator it = groups.find( gname ); - if ( it == groups.end() ) { - ConfigGroup *grp = new ConfigGroup; - git = groups.insert( gname, *grp ); - changed = TRUE; - return; - } - git = it; -} - -/*! - Writes a (\a key, \a value) entry to the current group. - - \sa readEntry() -*/ -void Config::writeEntry( const QString &key, const QString &value ) -{ - if ( git == groups.end() ) { - qWarning( "no group set" ); - return; - } - if ( (*git)[key] != value ) { - ( *git ).insert( key, value ); - changed = TRUE; - } -} - -/*! - Writes a (\a key, \a num) entry to the current group. - - \sa readNumEntry() -*/ -void Config::writeEntry( const QString &key, int num ) -{ - QString s; - s.setNum( num ); - writeEntry( key, s ); -} - -#ifdef Q_HAS_BOOL_TYPE -/*! - Writes a (\a key, \a b) entry to the current group. - - \sa readBoolEntry() -*/ -void Config::writeEntry( const QString &key, bool b ) -{ - QString s; - s.setNum( ( int )b ); - writeEntry( key, s ); -} -#endif - -/*! - Writes a (\a key, \a lst) entry to the current group. The list - is separated by \a sep, so the strings must not contain that character. - - \sa readListEntry() -*/ -void Config::writeEntry( const QString &key, const QStringList &lst, const QChar &sep ) -{ - QString s; - QStringList::ConstIterator it = lst.begin(); - for ( ; it != lst.end(); ++it ) - s += *it + sep; - writeEntry( key, s ); -} - - - -/*! - Reads a string entry stored with \a key, defaulting to \a deflt if there is no entry. -*/ -QString Config::readEntry( const QString &key, const QString &deflt ) -{ - QString res = readEntryDirect( key+"["+lang+"]" ); - if ( !res.isNull() ) - return res; - if ( !glang.isEmpty() ) { - res = readEntryDirect( key+"["+glang+"]" ); - if ( !res.isNull() ) - return res; - } - return readEntryDirect( key, deflt ); -} - -/*! - \internal -*/ -QString Config::readEntryDirect( const QString &key, const QString &deflt ) -{ - if ( git == groups.end() ) { - //qWarning( "no group set" ); - return deflt; - } - ConfigGroup::Iterator it = ( *git ).find( key ); - if ( it != ( *git ).end() ) - return *it; - else - return deflt; -} - -/*! - Reads a numeric entry stored with \a key, defaulting to \a deflt if there is no entry. -*/ -int Config::readNumEntry( const QString &key, int deflt ) -{ - QString s = readEntry( key ); - if ( s.isEmpty() ) - return deflt; - else - return s.toInt(); -} - -/*! - Reads a bool entry stored with \a key, defaulting to \a deflt if there is no entry. -*/ -bool Config::readBoolEntry( const QString &key, bool deflt ) -{ - QString s = readEntry( key ); - if ( s.isEmpty() ) - return deflt; - else - return (bool)s.toInt(); -} - -/*! - Reads a string list entry stored with \a key, and with \a sep as the separator. -*/ -QStringList Config::readListEntry( const QString &key, const QChar &sep ) -{ - QString s = readEntry( key ); - if ( s.isEmpty() ) - return QStringList(); - else - return QStringList::split( sep, s ); -} - -/*! - Removes all entries from the current group. -*/ -void Config::clearGroup() -{ - if ( git == groups.end() ) { - qWarning( "no group set" ); - return; - } - if ( !(*git).isEmpty() ) { - ( *git ).clear(); - changed = TRUE; - } -} - -/*! - \internal -*/ -void Config::write( const QString &fn ) -{ - if ( !fn.isEmpty() ) - filename = fn; - - QFile f( filename ); - if ( !f.open( IO_WriteOnly ) ) { - qWarning( "could not open for writing `%s'", filename.latin1() ); - git = groups.end(); - return; - } - - QTextStream s( &f ); -#if QT_VERSION <= 230 && defined(QT_NO_CODECS) - // The below should work, but doesn't in Qt 2.3.0 - s.setCodec( QTextCodec::codecForMib( 106 ) ); -#else - s.setEncoding( QTextStream::UnicodeUTF8 ); -#endif - QMap< QString, ConfigGroup >::Iterator g_it = groups.begin(); - for ( ; g_it != groups.end(); ++g_it ) { - s << "[" << g_it.key() << "]" << "\n"; - ConfigGroup::Iterator e_it = ( *g_it ).begin(); - for ( ; e_it != ( *g_it ).end(); ++e_it ) - s << e_it.key() << " = " << *e_it << "\n"; - } - - f.close(); -} - -/*! - Returns whether the Config is in a valid state. -*/ -bool Config::isValid() const -{ - return groups.end() != git; -} - -/*! - \internal -*/ -void Config::read() -{ - changed = FALSE; - - if ( !QFileInfo( filename ).exists() ) { - git = groups.end(); - return; - } - - QFile f( filename ); - if ( !f.open( IO_ReadOnly ) ) { - git = groups.end(); - return; - } - - QTextStream s( &f ); -#if QT_VERSION <= 230 && defined(QT_NO_CODECS) - // The below should work, but doesn't in Qt 2.3.0 - s.setCodec( QTextCodec::codecForMib( 106 ) ); -#else - s.setEncoding( QTextStream::UnicodeUTF8 ); -#endif - - QString line; - while ( !s.atEnd() ) { - line = s.readLine(); - if ( !parse( line ) ) { - git = groups.end(); - return; - } - } - - f.close(); -} - -/*! - \internal -*/ -bool Config::parse( const QString &l ) -{ - QString line = l.stripWhiteSpace(); - if ( line[ 0 ] == QChar( '[' ) ) { - QString gname = line; - gname = gname.remove( 0, 1 ); - if ( gname[ (int)gname.length() - 1 ] == QChar( ']' ) ) - gname = gname.remove( gname.length() - 1, 1 ); - ConfigGroup *grp = new ConfigGroup; - git = groups.insert( gname, *grp ); - } else if ( !line.isEmpty() ) { - if ( git == groups.end() ) - return FALSE; - int eq = line.find( '=' ); - if ( eq == -1 ) - return FALSE; - QString key = line.left(eq).stripWhiteSpace(); - QString value = line.mid(eq+1).stripWhiteSpace(); - ( *git ).insert( key, value ); - } - return TRUE; -} diff --git a/noncore/games/kpacman/config.h b/noncore/games/kpacman/config.h deleted file mode 100644 index 3c26b5d..0000000 --- a/noncore/games/kpacman/config.h +++ b/dev/null @@ -1,74 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qt Designer. -** -** 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. -** -**********************************************************************/ - -#ifndef CONFIG_H -#define CONFIG_H - -// ##### could use QSettings with Qt 3.0 - -#include <qmap.h> -#include <qstringlist.h> - -class ConfigPrivate; -class Config -{ -public: - typedef QMap< QString, QString > ConfigGroup; - - enum Domain { File, User }; - Config( const QString &name, Domain domain=User ); - ~Config(); - - bool isValid() const; - bool hasKey( const QString &key ) const; - - void setGroup( const QString &gname ); - void writeEntry( const QString &key, const QString &value ); - void writeEntry( const QString &key, int num ); -#ifdef Q_HAS_BOOL_TYPE - void writeEntry( const QString &key, bool b ); -#endif - void writeEntry( const QString &key, const QStringList &lst, const QChar &sep ); - - QString readEntry( const QString &key, const QString &deflt = QString::null ); - QString readEntryDirect( const QString &key, const QString &deflt = QString::null ); - int readNumEntry( const QString &key, int deflt = -1 ); - bool readBoolEntry( const QString &key, bool deflt = FALSE ); - QStringList readListEntry( const QString &key, const QChar &sep ); - - void clearGroup(); - - void write( const QString &fn = QString::null ); - -protected: - void read(); - bool parse( const QString &line ); - - QMap< QString, ConfigGroup > groups; - QMap< QString, ConfigGroup >::Iterator git; - QString filename; - QString lang; - QString glang; - bool changed; - ConfigPrivate *d; - static QString configFilename(const QString& name, Domain); -}; - -#endif diff --git a/noncore/games/kpacman/keys.cpp b/noncore/games/kpacman/keys.cpp index 8b17785..07ce135 100644 --- a/noncore/games/kpacman/keys.cpp +++ b/noncore/games/kpacman/keys.cpp @@ -1,203 +1,205 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <kconfig.h> #include <klocale.h> #include <kstddirs.h> #include <kaccel.h> #include <keys.h> #include <keys.moc> #elif defined( QPE_PORT ) #include <qaccel.h> #include <qpe/qpeapplication.h> -#include "config.h" +#include <qpe/config.h> #include "keys.h" #endif #include <qpushbt.h> #include <qlabel.h> #include <qframe.h> #include <qkeycode.h> #include <qpixmap.h> #include <qstring.h> Keys::Keys( QWidget *parent, const char *name) : QDialog( parent, name, TRUE ) { //KStandardDirs *dirs = KGlobal::dirs(); QPushButton *okButton = new QPushButton(this); okButton->setText(tr("Ok")); okButton->setFixedSize(okButton->size()); connect( okButton, SIGNAL(clicked()),this, SLOT(ok()) ); okButton->move(20,210); QPushButton *defaultButton = new QPushButton(this); defaultButton->setText(tr("Defaults")); defaultButton->setFixedSize(defaultButton->size()); connect( defaultButton, SIGNAL(clicked()),this, SLOT(defaults()) ); defaultButton->move(140,210); QPushButton *cancelButton = new QPushButton(this); cancelButton->setText(tr("Cancel")); cancelButton->setFixedSize(cancelButton->size()); connect( cancelButton, SIGNAL(clicked()),this, SLOT(reject()) ); cancelButton->move(260,210); QFrame *separator = new QFrame(this); separator->setFrameStyle( QFrame::HLine | QFrame::Sunken ); separator->setGeometry( 20, 190, 340, 4 ); for ( int x = 0; x < 4; x++) { QLabel *l = new QLabel(this); l->setAlignment(AlignCenter); labels[x] = l; } labels[0]->setGeometry(120, 20, 140, 20 ); labels[1]->setGeometry(120,160, 140, 20 ); labels[2]->setGeometry( 20, 92, 100, 20 ); labels[3]->setGeometry(265, 92, 100, 20 ); QString pixPath; QPushButton *up = new QPushButton(this); pixPath = FIND_APP_DATA( "pics/up.xpm" ); up->setPixmap( QPixmap(pixPath)); up->setFixedSize(up->pixmap()->size()); connect( up, SIGNAL(clicked()),this, SLOT(butUp()) ); up->move(180, 50); QPushButton *down = new QPushButton(this); pixPath = FIND_APP_DATA( "pics/down.xpm"); down->setPixmap( QPixmap(pixPath)); down->setFixedSize(down->pixmap()->size()); connect( down, SIGNAL(clicked()),this, SLOT(butDown()) ); down->move(180, 130); QPushButton *left = new QPushButton(this); pixPath = FIND_APP_DATA( "pics/left.xpm"); left->setPixmap( QPixmap(pixPath)); left->setFixedSize(left->pixmap()->size()); connect( left, SIGNAL(clicked()),this, SLOT(butLeft()) ); left->move(140, 90); QPushButton *right = new QPushButton(this); pixPath = FIND_APP_DATA( "pics/right.xpm"); right->setPixmap( QPixmap(pixPath)); right->setFixedSize(right->pixmap()->size()); connect( right, SIGNAL(clicked()),this, SLOT(butRight()) ); right->move(220, 90); setCaption(tr("Change Direction Keys")); setFixedSize(380, 260); lab = 0; init(); } void Keys::keyPressEvent( QKeyEvent *e ) { uint kCode = e->key() & ~(SHIFT | CTRL | ALT); QString string = KAccel::keyToString(kCode); if (lab != 0) { if ( string.isNull() ) lab->setText(tr("Undefined key")); else lab->setText(string); } else if ( lab == 0 && e->key() == Key_Escape) reject(); } void Keys::butUp() { getKey(0); } void Keys::butDown() { getKey(1); } void Keys::butLeft() { getKey(2); } void Keys::butRight() { getKey(3); } void Keys::getKey(int i) { if ( lab != 0) focusOut(lab); focusIn(labels[i]); } void Keys::focusOut(QLabel *l) { l->setFrameStyle( QFrame::NoFrame ); l->setBackgroundColor(backgroundColor()); l->repaint(); } void Keys::focusIn(QLabel *l) { lab = l; lab->setFrameStyle( QFrame::Panel | QFrame::Sunken ); lab->setBackgroundColor(white); lab->repaint(); } void Keys::defaults() { if ( lab != 0) focusOut(lab); lab = 0; labels[0]->setText("Up"); labels[1]->setText("Down"); labels[2]->setText("Left"); labels[3]->setText("Right"); } void Keys::init() { APP_CONFIG_BEGIN( cfg ); QString up("Up"); up = cfg->readEntry("upKey", (const char*) up); labels[0]->setText(up); QString down("Down"); down = cfg->readEntry("downKey", (const char*) down); labels[1]->setText(down); QString left("Left"); left = cfg->readEntry("leftKey", (const char*) left); labels[2]->setText(left); QString right("Right"); right = cfg->readEntry("rightKey", (const char*) right); labels[3]->setText(right); APP_CONFIG_END( cfg ); } void Keys::ok() { + /* APP_CONFIG_BEGIN( cfg ); cfg->writeEntry("upKey", (const char*) labels[0]->text() ); cfg->writeEntry("downKey", (const char*) labels[1]->text() ); cfg->writeEntry("leftKey", (const char*) labels[2]->text() ); cfg->writeEntry("rightKey",(const char*) labels[3]->text() ); APP_CONFIG_END( cfg ); + */ accept(); } diff --git a/noncore/games/kpacman/kpacman.cpp b/noncore/games/kpacman/kpacman.cpp index aee8eea..812e9ea 100644 --- a/noncore/games/kpacman/kpacman.cpp +++ b/noncore/games/kpacman/kpacman.cpp @@ -1,364 +1,368 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kpacman.h> #include <kpacman.moc> #include <kcolordlg.h> #elif defined( QPE_PORT ) #include <qmenubar.h> -#include "config.h" +#include <qpe/config.h> #include <qapplication.h> #include "kpacman.h" #endif #include <qkeycode.h> #include <qcolor.h> #include <qstring.h> #include <qpopmenu.h> #include <qmsgbox.h> Kpacman::Kpacman(QWidget *parent, const char *name) : KTMainWindow(parent, name) { schemesPopup = new QList<QPopupMenu>; schemesPopup->setAutoDelete(TRUE); menu(); m_view = new QWidget( this, "m_view" ); m_view->setBackgroundColor( black ); m_layout = new QGridLayout( m_view ); m_layout->setMargin( 7 ); view = new KpacmanWidget( this, QString(name)+"widget"); m_layout->addWidget( view, 0, 0 ); setCaption( "KPacman" ); view->referee->setFocus(); connect(view->referee, SIGNAL(setScore(int, int)), view->score, SLOT(setScore(int, int))); connect(view->referee, SIGNAL(setPoints(int)), view->score, SLOT(set(int))); connect(view->referee, SIGNAL(setLifes(int)), view->status, SLOT(setLifes(int))); connect(view->referee, SIGNAL(setLevel(int)), view->status, SLOT(setLevel(int))); connect(view->referee, SIGNAL(forcedHallOfFame(bool)), this, SLOT(forcedHallOfFame(bool))); connect(view->referee, SIGNAL(togglePaused()), this, SLOT(togglePaused())); connect(view->referee, SIGNAL(toggleNew()), this, SLOT(toggleNew())); connect(view->score, SIGNAL(toggleNew()), this, SLOT(toggleNew())); connect(view->score, SIGNAL(forcedHallOfFame(bool)), this, SLOT(forcedHallOfFame(bool))); APP_CONFIG_BEGIN( cfg ); focusOutPause = !cfg->readBoolEntry("FocusOutPause", TRUE); focusInContinue = !cfg->readBoolEntry("FocusInContinue", TRUE); hideMouseCursor = !cfg->readBoolEntry("HideMouseCursor", TRUE); APP_CONFIG_END( cfg ); toggleFocusOutPause(); toggleFocusInContinue(); toggleHideMouseCursor(); setCentralWidget( m_view ); } Kpacman::~Kpacman() { - APP_CONFIG_BEGIN( cfg ); + /* APP_CONFIG_BEGIN( cfg ); cfg->writeEntry("FocusOutPause", focusOutPause); cfg->writeEntry("FocusInContinue", focusInContinue); cfg->writeEntry("HideMouseCursor", hideMouseCursor); APP_CONFIG_END( cfg ); + */ delete _menuBar; } void Kpacman::menu() { gamePopup = new QPopupMenu(); CHECK_PTR( gamePopup ); newID = gamePopup->insertItem(tr("&New"), this, SLOT(newKpacman()),Key_F2); pauseID = gamePopup->insertItem(tr("&Pause"), this, SLOT(pauseKpacman()), Key_F3); hofID = gamePopup->insertItem(tr("&Hall of fame"), this, SLOT(toggleHallOfFame()), Key_F4); gamePopup->insertSeparator(); gamePopup->insertItem(tr("&Quit"), this, SLOT(quitKpacman()), CTRL+Key_Q); gamePopup->setCheckable(TRUE); optionsPopup = new QPopupMenu(); CHECK_PTR(optionsPopup); modesPopup = new QPopupMenu(); CHECK_PTR(modesPopup); hideMouseCursorID = optionsPopup->insertItem(tr("&Hide Mousecursor"), this, SLOT(toggleHideMouseCursor()), CTRL+Key_H); optionsPopup->insertSeparator(); if (lookupSchemes() > 0) { optionsPopup->insertItem(tr("&Select graphic scheme"), modesPopup); optionsPopup->insertSeparator(); } focusOutPauseID = optionsPopup->insertItem(tr("&Pause in Background"), this, SLOT(toggleFocusOutPause())); focusInContinueID = optionsPopup->insertItem(tr("&Continue in Foreground"), this, SLOT(toggleFocusInContinue())); optionsPopup->insertSeparator(); optionsPopup->insertItem(tr("Change &keys..."), this, SLOT(confKeys())); #ifndef QPE_PORT QString aboutText = tr("@PACKAGE@ - @VERSION@\n\n" "Joerg Thoennissen (joe@dsite.de)\n\n" "A pacman game for the KDE Desktop\n\n" "The program based on the source of ksnake\n" "by Michel Filippi (mfilippi@sade.rhein-main.de).\n" "The design was strongly influenced by the pacman\n" "(c) 1980 MIDWAY MFG.CO.\n\n" "I like to thank my girlfriend Elke Krueers for\n" "the last 10 years of her friendship.\n"); aboutText.replace(QRegExp("@PACKAGE@"), PACKAGE); aboutText.replace(QRegExp("@VERSION@"), VERSION); QPopupMenu *helpPopup = helpMenu(aboutText, FALSE); #endif //_menuBar = new KMenuBar(this); //CHECK_PTR( _menuBar ); //_menuBar->insertItem(tr("&Game"), gamePopup); //_menuBar->insertItem(tr("&Options"), optionsPopup); //_menuBar->insertSeparator(); #ifndef QPE_PORT _menuBar->insertItem(tr("&Help"), helpPopup); #endif } int Kpacman::lookupSchemes() { APP_CONFIG_BEGIN( cfg ); - int ModeCount = cfg->readNumEntry("ModeCount", -1); - int Mode = cfg->readNumEntry("Mode", -1); - int SchemeCount = cfg->readNumEntry("SchemeCount"); - int Scheme = cfg->readNumEntry("Scheme", -1); + int ModeCount = cfg->readNumEntry("ModeCount", 0); + int Mode = cfg->readNumEntry("Mode", 0); + int SchemeCount = cfg->readNumEntry("SchemeCount", 0); + int Scheme = cfg->readNumEntry("Scheme", 0); + /* if (SchemeCount == 0 || Scheme == -1) { QMessageBox::warning(this, tr("Configuration Error"), tr("There are no schemes defined,\n" "or no scheme is selected.")); APP_CONFIG_END( cfg ); return 0; } + */ connect(modesPopup, SIGNAL(activated(int)), this, SLOT(schemeChecked(int))); modeID.resize(ModeCount > 0 ? ModeCount : 0); if (!schemesPopup->isEmpty()) schemesPopup->clear(); SAVE_CONFIG_GROUP( cfg, oldgroup ); QString ModeGroup; QString ModeName; for (int m = 0; m < ModeCount; m++) { ModeGroup.sprintf("Mode %d", m); cfg->setGroup(ModeGroup); ModeName = cfg->readEntry("Description", ModeGroup); QPopupMenu *p = new QPopupMenu; p->setCheckable(TRUE); connect(p, SIGNAL(activated(int)), this, SLOT(schemeChecked(int))); schemesPopup->append(p); modeID[m] = modesPopup->insertItem(ModeName, schemesPopup->at(m)); modesPopup->setItemEnabled(modeID[m], FALSE); modesPopup->setItemChecked(modeID[m], m == Mode); } schemeID.resize(SchemeCount); schemeMode.resize(SchemeCount); QString SchemeGroup; QString SchemeName; int SchemeMode; for (int i = 0; i < SchemeCount; i++) { SchemeGroup.sprintf("Scheme %d", i); cfg->setGroup(SchemeGroup); SchemeName = cfg->readEntry("Description", SchemeGroup); SchemeMode = cfg->readNumEntry("Mode", -1); schemeMode[i] = SchemeMode; if (SchemeMode == -1) { schemeID[i] = modesPopup->insertItem(SchemeName); modesPopup->setItemChecked(schemeID[i], i == Scheme); } else { schemeID[i] = schemesPopup->at(SchemeMode)->insertItem(SchemeName); schemesPopup->at(SchemeMode)-> setItemChecked(schemeID[i], i == Scheme); modesPopup->setItemEnabled(modeID[SchemeMode], TRUE); } } RESTORE_CONFIG_GROUP( cfg, oldgroup ); APP_CONFIG_END( cfg ); return SchemeCount; } void Kpacman::quitKpacman() { APP_QUIT(); } void Kpacman::newKpacman() { if (!gamePopup->isItemEnabled(hofID)) gamePopup->setItemEnabled(hofID, TRUE); if (gamePopup->isItemChecked(hofID)) toggleHallOfFame(); if (gamePopup->isItemChecked(pauseID)) pauseKpacman(); view->referee->play(); } void Kpacman::pauseKpacman() { view->referee->pause(); view->score->setPause(gamePopup->isItemChecked(pauseID)); } void Kpacman::toggleHallOfFame() { gamePopup->setItemChecked(hofID, !gamePopup->isItemChecked(hofID)); view->referee->toggleHallOfFame(); if (gamePopup->isItemChecked(hofID)) { view->referee->lower(); view->status->lower(); } else { view->status->raise(); view->referee->raise(); view->referee->setFocus(); } } /* * Disable or enable the "Hall of fame"-menuitem if the referee says so. * This is done, to disable turning off the "hall of fame"-display, in the automated * sequence of displaying the introduction, the demonstration (or playing) and the * hall of fame. * If on == TRUE then also lower the referee and the status widgets. */ void Kpacman::forcedHallOfFame(bool on) { if (!on && !gamePopup->isItemChecked(hofID)) return; gamePopup->setItemEnabled(hofID, !on); gamePopup->setItemChecked(hofID, on); view->referee->toggleHallOfFame(); if (on) { view->referee->lower(); view->status->lower(); } else { view->status->raise(); view->referee->raise(); view->referee->setFocus(); view->referee->intro(); } } void Kpacman::togglePaused() { static bool checked = FALSE; checked = !checked; gamePopup->setItemChecked( pauseID, checked ); view->score->setPause(gamePopup->isItemChecked(pauseID)); } /* * This disables the "New Game" menuitem to prevent interruptions of the current * play. */ void Kpacman::toggleNew() { gamePopup->setItemEnabled(newID, !gamePopup->isItemEnabled(newID)); } void Kpacman::toggleHideMouseCursor() { hideMouseCursor = !hideMouseCursor; optionsPopup->setItemChecked(hideMouseCursorID, hideMouseCursor); if (hideMouseCursor) view->setCursor(blankCursor); else view->setCursor(arrowCursor); } void Kpacman::toggleFocusOutPause() { focusOutPause = !focusOutPause; optionsPopup->setItemChecked(focusOutPauseID, focusOutPause); view->referee->setFocusOutPause(focusOutPause); } void Kpacman::toggleFocusInContinue() { focusInContinue = !focusInContinue; optionsPopup->setItemChecked(focusInContinueID, focusInContinue); view->referee->setFocusInContinue(focusInContinue); } void Kpacman::confKeys() { Keys *keys = new Keys(); if (keys->exec() == QDialog::Accepted) { view->referee->initKeys(); view->score->initKeys(); } delete keys; } void Kpacman::schemeChecked(int id) { int mode = 0, scheme = -1; for (uint s = 0; s < schemeID.size(); s++) { if (schemeID[s] == id) { scheme = s; mode = schemeMode[s]; } if (schemeMode[s] == -1) { modesPopup->setItemChecked(schemeID[s], schemeID[s] == id); } else { modesPopup->setItemChecked(modeID[schemeMode[s]], schemeMode[s] == mode); schemesPopup->at(schemeMode[s])->setItemChecked(schemeID[s], schemeID[s] == id); } } - + /* APP_CONFIG_BEGIN( cfg ); cfg->writeEntry("Scheme", scheme); cfg->writeEntry("Mode", mode); APP_CONFIG_END( cfg ); + */ view->setScheme(scheme, mode); view->updateGeometry(); updateGeometry(); update(); repaint(TRUE); show(); } diff --git a/noncore/games/kpacman/kpacman.pro b/noncore/games/kpacman/kpacman.pro index e193ebc..81d369a 100644 --- a/noncore/games/kpacman/kpacman.pro +++ b/noncore/games/kpacman/kpacman.pro @@ -1,63 +1,61 @@ TEMPLATE = app #CONFIG = qt warn_on debug CONFIG = qt warn_on release #TMAKE_CXXFLAGS += HEADERS = kpacmanwidget.h \ referee.h \ status.h \ painter.h \ score.h \ pacman.h \ monster.h \ keys.h \ fruit.h \ energizer.h \ board.h \ bitfont.h \ kpacman.h \ bitmaps.h \ colors.h \ - config.h \ portable.h SOURCES = kpacmanwidget.cpp \ referee.cpp \ status.cpp \ painter.cpp \ score.cpp \ pacman.cpp \ monster.cpp \ keys.cpp \ fruit.cpp \ energizer.cpp \ board.cpp \ bitfont.cpp \ kpacman.cpp \ - config.cpp \ main.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe DESTDIR = $(OPIEDIR)/bin TARGET = kpacman TRANSLATIONS = ../../../i18n/de/kpacman.ts \ ../../../i18n/nl/kpacman.ts \ ../../../i18n/da/kpacman.ts \ ../../../i18n/xx/kpacman.ts \ ../../../i18n/en/kpacman.ts \ ../../../i18n/es/kpacman.ts \ ../../../i18n/fr/kpacman.ts \ ../../../i18n/hu/kpacman.ts \ ../../../i18n/ja/kpacman.ts \ ../../../i18n/ko/kpacman.ts \ ../../../i18n/no/kpacman.ts \ ../../../i18n/pl/kpacman.ts \ ../../../i18n/pt/kpacman.ts \ ../../../i18n/pt_BR/kpacman.ts \ ../../../i18n/sl/kpacman.ts \ ../../../i18n/zh_CN/kpacman.ts \ ../../../i18n/zh_TW/kpacman.ts include ( $(OPIEDIR)/include.pro ) diff --git a/noncore/games/kpacman/kpacmanwidget.cpp b/noncore/games/kpacman/kpacmanwidget.cpp index cf2aed9..823d2bf 100644 --- a/noncore/games/kpacman/kpacmanwidget.cpp +++ b/noncore/games/kpacman/kpacmanwidget.cpp @@ -1,158 +1,158 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <kconfig.h> #include <kstddirs.h> #include <kpacmanwidget.h> #include <kpacmanwidget.moc> #elif defined( QPE_PORT ) #include <qpe/qpeapplication.h> -#include "config.h" +#include <qpe/config.h> #include "kpacmanwidget.h" #endif #include <qmessagebox.h> #include "bitfont.h" #include "score.h" #include "referee.h" #include "status.h" KpacmanWidget::KpacmanWidget( QWidget *parent, const char *name) : QWidget( parent, name ) { score = 0l; referee = 0l; status = 0l; bitfont = NULL; fontName = ""; scheme = mode = -1; confScheme(); score = new Score(this, name, scheme, mode, bitfont); referee = new Referee( this, name, scheme, mode, bitfont); status = new Status(this, name, scheme, mode); setBackgroundColor( black ); } KpacmanWidget::~KpacmanWidget() { } void KpacmanWidget::confMisc(bool defGroup) { APP_CONFIG_BEGIN( cfg ); //KStandardDirs *dirs = KGlobal::dirs(); QString findPath; if (defGroup || cfg->hasKey("Font")) { fontName = cfg->readEntry("Font"); if (fontName.left(1) != "/" && fontName.left(1) != "~") fontName.insert(0, "fonts/"); if (fontName.right(1) == "/") fontName.append("font.xbm"); //findPath = dirs->findResource("appdata", fontName); findPath = FIND_APP_DATA( fontName ); if (!findPath.isEmpty()) fontName = findPath; bitfontFirstChar = cfg->readNumEntry("FontFirstChar", 0x0e); bitfontLastChar = cfg->readNumEntry("FontLastChar", 0x5f); } APP_CONFIG_END( cfg ); } void KpacmanWidget::confScheme() { APP_CONFIG_BEGIN( cfg ); QString lastFontName = fontName; SAVE_CONFIG_GROUP( cfg, oldgroup ); QString newgroup; // if not set, read mode and scheme from the configfile if (mode == -1 && scheme == -1) { scheme = cfg->readNumEntry("Scheme", -1); mode = cfg->readNumEntry("Mode", -1); // if mode is not set in the defGroup-group, lookup the scheme group if (scheme != -1 || mode == -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); mode = cfg->readNumEntry("Mode", -1); RESTORE_CONFIG_GROUP( cfg, oldgroup ); } } confMisc(); if (mode != -1) { newgroup.sprintf("Mode %d", mode); cfg->setGroup(newgroup); confMisc(FALSE); } if (scheme != -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); confMisc(FALSE); } if (lastFontName != fontName) { if (bitfont != 0) delete bitfont; bitfont = new Bitfont(fontName, bitfontFirstChar, bitfontLastChar); if (bitfont->width() == 0 || bitfont->height() == 0) { QString msg = tr("The bitfont could not be contructed.\n\n" "The file '@FONTNAME@' does not exist,\n" "or is of an unknown format."); msg.replace(QRegExp("@FONTNAME@"), fontName); // QMessageBox::critical(this, tr("Initialization Error"), msg); printf("%s\n", msg.data()); } } RESTORE_CONFIG_GROUP( cfg, oldgroup ); APP_CONFIG_END( cfg ); } void KpacmanWidget::setScheme(int Scheme, int Mode) { mode = Mode; scheme = Scheme; confScheme(); score->setScheme(Scheme, Mode, bitfont); referee->setScheme(Scheme, Mode, bitfont); status->setScheme(Scheme, Mode); score->repaint(FALSE); referee->repaint(FALSE); status->repaint(FALSE); } void KpacmanWidget::resizeEvent( QResizeEvent * ) { qWarning("Resize"); referee->setGeometry(0, bitfont->height()*3, referee->width(), referee->height()); referee->setBackgroundColor(BLACK); if(!status ) return; status->setGeometry(0, bitfont->height()*3+referee->height(), referee->width(), status->height()); status->setBackgroundColor(BLACK); score->setGeometry(0, 0, referee->width(), bitfont->height()*3+referee->height()+status->height()); score->setBackgroundColor(BLACK); } diff --git a/noncore/games/kpacman/painter.cpp b/noncore/games/kpacman/painter.cpp index 80aeab0..d8c7460 100644 --- a/noncore/games/kpacman/painter.cpp +++ b/noncore/games/kpacman/painter.cpp @@ -1,202 +1,202 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <kconfig.h> #include <kstddirs.h> #elif defined( QPE_PORT ) #include <qpe/qpeapplication.h> -#include "config.h" +#include <qpe/config.h> #endif #include <qcolor.h> #include <qpainter.h> #include <qpixmap.h> #include <qbitmap.h> #include <qrect.h> #include <qstring.h> #include <qmessagebox.h> #include <qfileinfo.h> #include "painter.h" #include "board.h" Painter::Painter( Board *b, QWidget *parent, int Scheme, int Mode, Bitfont *font) { w = parent; board = b; pointPix = NULL; wallPix = NULL; prisonPix = NULL; energizerPix = NULL; fruitPix = NULL; pacmanPix = NULL; dyingPix = NULL; eyesPix = NULL; monsterPix = NULL; fruitScorePix = NULL; monsterScorePix = NULL; lastPointPixmapName = ""; lastWallPixmapName = ""; lastPrisonPixmapName = ""; lastEnergizerPixmapName = ""; lastFruitPixmapName = ""; lastPacmanPixmapName = ""; lastDyingPixmapName = ""; lastEyesPixmapName = ""; lastMonsterPixmapName = ""; lastFruitScorePixmapName = ""; lastMonsterScorePixmapName = ""; bitfont = font; scheme = Scheme; mode = Mode; level = 0; confScheme(); } QList<QPixmap> *Painter::loadPixmap(QWidget*, QString pixmapName, QList<QPixmap> *pixmaps) { if (pixmaps == NULL) { pixmaps = new QList<QPixmap>; pixmaps->setAutoDelete(TRUE); } if (!pixmaps->isEmpty()) pixmaps->clear(); QPixmap PIXMAP(pixmapName); if (PIXMAP.isNull() || PIXMAP.mask() == NULL) { QString msg = "The pixmap could not be contructed.\n\n" "The file '@PIXMAPNAME@' does not exist,\n" "or is of an unknown format."; msg.replace(QRegExp("@PIXMAPNAME@"), pixmapName); // QMessageBox::critical(parent, tr("Initialization Error"), msg); printf("%s\n", msg.data()); return 0; } int height = PIXMAP.height(); int width = (height == 0) ? 0 : PIXMAP.width()/(PIXMAP.width()/height); QBitmap BITMAP; QBitmap MASK; BITMAP = *PIXMAP.mask(); MASK.resize(width, height); for (int x = 0; x < PIXMAP.width()/width; x++) { QPixmap *pixmap = new QPixmap(width, height); pixmaps->append(pixmap); bitBlt(pixmap, 0, 0, &PIXMAP, x*width, 0, width, height, QPixmap::CopyROP, TRUE); bitBlt(&MASK, 0, 0, &BITMAP, x*width, 0, width, height, QPixmap::CopyROP, TRUE); pixmap->setMask(MASK); } return pixmaps; } QList<QPixmap> *Painter::textPixmap(QStrList &str, QList<QPixmap> *pixmaps, QColor fg, QColor bg) { if (pixmaps == NULL) { pixmaps = new QList<QPixmap>; pixmaps->setAutoDelete(TRUE); } if (!pixmaps->isEmpty()) pixmaps->clear(); for (uint s = 0; s < str.count(); s++) { QPixmap *pixmap = new QPixmap(bitfont->text(str.at(s), fg, bg)); pixmaps->append(pixmap); } return pixmaps; } QList<QPixmap> *Painter::textPixmap(QString str, QList<QPixmap> *pixmaps, QColor fg, QColor bg) { if (pixmaps == NULL) { pixmaps = new QList<QPixmap>; pixmaps->setAutoDelete(TRUE); } if (!pixmaps->isEmpty()) pixmaps->clear(); QPixmap *pixmap = new QPixmap(bitfont->text(str, fg, bg)); pixmaps->append(pixmap); return pixmaps; } /* Return the point of the upperleft pixel of the block representing that position * on the board. */ QPoint Painter::point(int pos) { return QPoint((board->x(pos)-1)*BlockWidth, (board->y(pos)-1)*BlockHeight); } QRect Painter::rect(int pos, PixMap pix, uint i) { if (pos == OUT) return QRect(); QPixmap *PIXMAP = NULL; switch (pix) { case PacmanPix : PIXMAP = pacmanPix-> at(checkRange(i, pacmanPix->count()-1)); break; case DyingPix : PIXMAP = dyingPix-> at(checkRange(i, dyingPix->count()-1)); break; case MonsterPix : PIXMAP = monsterPix-> at(checkRange(i, monsterPix->count()-1)); break; case EyesPix : PIXMAP = eyesPix-> at(checkRange(i, eyesPix->count()-1)); break; case FruitPix : PIXMAP = fruitPix-> at(checkRange(i, fruitPix->count()-1)); break; case PointPix : PIXMAP = pointPix-> at(checkRange(i, pointPix->count()-1)); break; case EnergizerPix : PIXMAP = energizerPix-> at(checkRange(i, energizerPix->count()-1)); break; case FruitScorePix : PIXMAP = fruitScorePix-> at(checkRange(i, fruitScorePix->count()-1)); break; case MonsterScorePix : PIXMAP = monsterScorePix-> at(checkRange(i,monsterScorePix->count()-1)); break; default : PIXMAP = wallPix-> at(checkRange(i, wallPix->count()-1)); } if (PIXMAP == NULL) return QRect(); QRect rect = PIXMAP->rect(); QPoint point = this->point(pos); rect.moveCenter(QPoint(point.x()-1, point.y()-1)); return rect; } QRect Painter::rect(int pos, QString str, int align) { if (pos == OUT) // return an empty rect if the position return QRect(); // is invalid QPoint point = this->point(pos); diff --git a/noncore/games/kpacman/referee.cpp b/noncore/games/kpacman/referee.cpp index 6d8f3fb..1b810d8 100644 --- a/noncore/games/kpacman/referee.cpp +++ b/noncore/games/kpacman/referee.cpp @@ -1,206 +1,206 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <kconfig.h> #include <kstddirs.h> #include <kaccel.h> #include <referee.h> #include <referee.moc> #elif defined( QPE_PORT ) #include <qaccel.h> #include <qpe/qpeapplication.h> -#include "config.h" +#include <qpe/config.h> #include "referee.h" #endif #include <qdatetm.h> #include <stdlib.h> #include <qtimer.h> #include <qevent.h> #include <qcolor.h> #include <qkeycode.h> #include <qfileinfo.h> #include "board.h" #include "pacman.h" #include "monster.h" #include "fruit.h" #include "painter.h" Referee::Referee( QWidget *parent, const char *name, int Scheme, int Mode, Bitfont *font) : QWidget( parent, name ) { gameState.resize(12); gameTimer = 0; energizerTimer = 0; focusedPause = FALSE; setFocusPolicy(QWidget::StrongFocus); initKeys(); scheme = Scheme; mode = Mode; confScheme(); board = new Board(BoardWidth*BoardHeight); pix = new Painter(board, this, scheme, mode, font); setFixedSize(pix->levelPix().size()); pacman = new Pacman(board); fruit = new Fruit(board); monsters = new QList<Monster>; monsters->setAutoDelete(TRUE); monsterRect = new QList<QRect>; monsterRect->setAutoDelete(TRUE); energizers = new QList<Energizer>; energizers->setAutoDelete(TRUE); energizerRect = new QList<QRect>; energizerRect->setAutoDelete(TRUE); pacmanRect.setRect(0, 0, 0, 0); fruitRect.setRect(0, 0, 0, 0); QTime midnight( 0, 0, 0 ); srand( midnight.secsTo(QTime::currentTime()) ); lifes = 0; points = 0; emit setLifes(lifes); emit setPoints(points); intro(); } void Referee::paintEvent( QPaintEvent *e) { if (gameState.testBit(HallOfFame)) return; QRect rect = e->rect(); if (!rect.isEmpty()) { QPixmap p = pix->levelPix(); bitBlt(this, rect.x(), rect.y(), &p, rect.x(), rect.y(), rect.width(), rect.height()); } if ((gameState.testBit(GameOver) || gameState.testBit(Demonstration)) && rect.intersects(pix->rect(board->position(fruithome), tr("GAME OVER")))) pix->draw(board->position(fruithome), Widget, tr("GAME OVER"), RED); for (Energizer *e = energizers->first(); e != 0; e = energizers->next()) { if (e && e->state() == on && rect.intersects(pix->rect(e->position(), EnergizerPix)) && !(e->position() == pacman->position() && gameState.testBit(Scoring))) { if (e->pix() != -1) pix->draw(e->position(), Widget, EnergizerPix, e->pix()); } } if (!gameState.testBit(Init)) { if (!gameState.testBit(Dying) && (fruit->pix() != -1)) if (fruit->state() != active) { if (rect.intersects(pix->rect(fruit->position(), FruitScorePix, fruit->pix()))) pix->draw(fruit->position(), Widget, FruitScorePix, fruit->pix()); } else { if (rect.intersects(pix->rect(fruit->position(), FruitPix, fruit->pix()))) pix->draw(fruit->position(), Widget, FruitPix, fruit->pix()); } for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m && m->state() == harmless && rect.intersects(pix->rect(m->position(), MonsterPix)) && !(m->position() == pacman->position() && gameState.testBit(Scoring))) { if (m->body() != -1) pix->draw(m->position(), Widget, MonsterPix, m->body()); if (m->eyes() != -1) pix->draw(m->position(), Widget, EyesPix, m->eyes()); } if (!gameState.testBit(Scoring) && !gameState.testBit(LevelDone) && rect.intersects(pix->rect(pacman->position(), PacmanPix)) && pacman->pix() != -1) pix->draw(pacman->position(), Widget, PacmanPix, pacman->pix()); for (Monster *m = monsters->first(); m != 0; m = monsters->next()) if (m && m->state() != harmless && rect.intersects(pix->rect(m->position(), MonsterPix)) && !(m->position() == pacman->position() && gameState.testBit(Scoring))) { if (m->body() != -1) pix->draw(m->position(), Widget, MonsterPix, m->body()); if (m->eyes() != -1) pix->draw(m->position(), Widget, EyesPix, m->eyes()); } } if (gameState.testBit(Scoring) && rect.intersects(pix->rect(pacman->position(), MonsterScorePix, monstersEaten-1))) pix->draw(pacman->position(), Widget, MonsterScorePix, monstersEaten-1); if (gameState.testBit(Init) && gameState.testBit(Dying) && timerCount < pix->maxPixmaps(DyingPix) && rect.intersects(pix->rect(pacman->position(), PacmanPix))) pix->draw(pacman->position(), Widget, DyingPix, timerCount); if (gameState.testBit(LevelDone) && rect.intersects(pix->rect(pacman->position(), PacmanPix))) pix->draw(pacman->position(), Widget, PacmanPix, pacman->pix()); if (gameState.testBit(Player) && rect.intersects(pix->rect(board->position(monsterhome, 0), tr("PLAYER ONE")))) pix->draw(board->position(monsterhome, 0), Widget, tr("PLAYER ONE"), CYAN); if (gameState.testBit(Ready) && rect.intersects(pix->rect(board->position(fruithome), tr("READY!")))) pix->draw(board->position(fruithome), Widget, tr("READY!"), YELLOW); if (gameState.testBit(Paused) && rect.intersects(pix->rect((BoardWidth*BoardHeight)/2-BoardWidth, tr("PAUSED")))) pix->draw((BoardWidth*BoardHeight)/2-BoardWidth, Widget, tr("PAUSED"), RED, BLACK); } void Referee::timerEvent( QTimerEvent *e ) { if (gameState.testBit(HallOfFame)) return; QRect lastRect; int lastPix; bool moved = FALSE; int eated = 0; if (e->timerId() == energizerTimer) { for (int e = 0; e < board->energizers(); e++) { lastRect = pix->rect(energizers->at(e)->position(), EnergizerPix); lastPix = energizers->at(e)->pix(); if (energizers->at(e)->move()) { moved = TRUE; *energizerRect->at(e) = pix->rect(energizers->at(e)->position(), EnergizerPix); if (lastPix == energizers->at(e)->pix() && lastRect == pix->rect(energizers->at(e)->position(), EnergizerPix)) energizerRect->at(e)->setRect(0, 0, 0, 0); else *energizerRect->at(e) = pix->rect(*energizerRect->at(e), lastRect); } } for (int e = 0; e < board->energizers(); e++) if (!energizerRect->at(e)->isNull()) repaint(*energizerRect->at(e), FALSE); return; } timerCount++; lastRect = pix->rect(pacman->position(), PacmanPix); diff --git a/noncore/games/kpacman/status.cpp b/noncore/games/kpacman/status.cpp index 1ef910d..2a17c21 100644 --- a/noncore/games/kpacman/status.cpp +++ b/noncore/games/kpacman/status.cpp @@ -1,368 +1,368 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kapp.h> #include <klocale.h> #include <kstddirs.h> #include <status.h> #include <status.moc> #elif defined( QPE_PORT ) #include <qpe/qpeapplication.h> -#include "config.h" +#include <qpe/config.h> #include "status.h" #endif #include <qpixmap.h> #include <qbitmap.h> #include <qstring.h> #include <qmsgbox.h> #include <qfileinfo.h> Status::Status( QWidget *parent, const char *name, int Scheme, int Mode ) : QWidget( parent, name ) { qWarning("Status::Status"); actualLifes = 0; actualLevel = 0; lifesPix = NULL; levelPix = NULL; scheme = Scheme; mode = Mode; level = 0; confScheme(); } QList<QPixmap> *Status::loadPixmap(QWidget *parent, QString pixmapName, QList<QPixmap> *pixmaps) { if (pixmaps == NULL) { pixmaps = new QList<QPixmap>; pixmaps->setAutoDelete(TRUE); } if (!pixmaps->isEmpty()) pixmaps->clear(); QPixmap PIXMAP(pixmapName); if (PIXMAP.isNull() || PIXMAP.mask() == NULL) { QString msg = tr("The pixmap could not be contructed.\n\n" "The file '@PIXMAPNAME@' does not exist,\n" "or is of an unknown format."); msg.replace(QRegExp("@PIXMAPNAME@"), pixmapName); QMessageBox::information(parent, tr("Initialization Error"), (const char *) msg); return 0; } int height = PIXMAP.height(); int width = (height == 0) ? 0 : PIXMAP.width()/(PIXMAP.width()/height); QBitmap BITMAP; QBitmap MASK; BITMAP = *PIXMAP.mask(); MASK.resize(width, height); for (int x = 0; x < PIXMAP.width()/width; x++) { QPixmap *pixmap = new QPixmap(width, height); pixmaps->append(pixmap); bitBlt(pixmap, 0, 0, &PIXMAP, x*width, 0, width, height, CopyROP, TRUE); bitBlt(&MASK, 0, 0, &BITMAP, x*width, 0, width, height, CopyROP, TRUE); pixmap->setMask(MASK); } return pixmaps; } void Status::paintEvent( QPaintEvent *) { for (int x = 0; x < actualLifes && !lifesPix->isEmpty(); x++) bitBlt(this, lifesPix->at(0)->width()+(lifesPix->at(0)->width()*x), (height()-lifesPix->at(0)->height())/2, lifesPix->at(0), 0, 0, lifesPix->at(0)->width(), lifesPix->at(0)->height()); for (int x = 0; x < actualLevel && !levelPix->isEmpty(); x++) { erase((width()-levelPix->at(x)->width()*2)-(levelPix->at(x)->width()*levelPos[x]), (height()-levelPix->at(x)->height())/2, levelPix->at(x)->width(), levelPix->at(x)->height()); bitBlt(this, (width()-levelPix->at(x)->width()*2)-(levelPix->at(x)->width()*levelPos[x]), (height()-levelPix->at(x)->height())/2, levelPix->at(x), 0, 0, levelPix->at(x)->width(), levelPix->at(x)->height()); } } void Status::initPixmaps() { if (lastLifesPixmapName != lifesPixmapName.at(level)) { lifesPix = loadPixmap(this, lifesPixmapName.at(level), lifesPix); lastLifesPixmapName = lifesPixmapName.at(level); } if (lastLevelPixmapName != levelPixmapName.at(level)) { levelPix = loadPixmap(this, levelPixmapName.at(level), levelPix); lastLevelPixmapName = levelPixmapName.at(level); } } QString Status::decodeHexOctString(QString s) { QString value; QString valids; int pos, xpos = 0, opos = 0; int v, len, leadin; const char *ptr; uchar c; while (((xpos = s.find(QRegExp("\\\\x[0-9a-fA-F]+"), xpos)) != -1) || ((opos = s.find(QRegExp("\\\\[0-7]+"), opos)) != -1)) { if (xpos != -1) { valids = "0123456789abcdef"; leadin = 2; pos = xpos; } else { valids = "01234567"; leadin = 1; pos = opos; } c = '\0'; len = 0; value = s.mid(pos+leadin, 3); ptr = (const char *) value; while (*ptr != '\0' && (v = valids.find(*ptr++, 0, FALSE)) != -1) { c = (c * valids.length()) + v; len++; } value.fill(c, 1); s.replace(pos, len+leadin, value); } return s; } void Status::fillArray(QArray<int> &array, QString values, int max) { array.resize(max); int last = 0; bool ok; QString value; for (uint i = 0; i < array.size(); i++) { if (values.find(',') < 0 && values.length() > 0) { value = values; values = ""; } if (values.find(',') >= 0) { value = values.left(values.find(',')); values.remove(0,values.find(',')+1); } array[i] = value.toInt(&ok); if (ok) last = array[i]; else array[i] = last; } } void Status::fillStrList(QStrList &list, QString values, int max) { if (!list.isEmpty()) list.clear(); QString last = ""; QString value; for (uint i = 0; i < (uint) max; i++) { if (values.find(',') < 0 && values.length() > 0) { value = values; values = ""; } if (values.find(',') >= 0) { value = values.left(values.find(',')); values.remove(0,values.find(',')+1); } if (!value.isEmpty()) last = decodeHexOctString(value); list.append(last); } } void Status::fillPixmapName(QStrList &pixmapName) { QStrList list = pixmapName; if (!pixmapName.isEmpty()) pixmapName.clear(); QString pixmap; QFileInfo fileInfo; for (uint i = 0; i < list.count(); i++) { pixmap = list.at(i); if (pixmap.left(1) != "/" && pixmap.left(1) != "~") pixmap = FIND_APP_DATA( pixmapDirectory+pixmap ); fileInfo.setFile(pixmap); if (!fileInfo.isReadable() || !fileInfo.isFile()) pixmap = ""; pixmapName.append(pixmap); } } void Status::confLevels(bool defGroup) { APP_CONFIG_BEGIN( cfg ); if (defGroup || cfg->hasKey("Levels")) maxLevel = cfg->readNumEntry("Levels", 13); APP_CONFIG_END( cfg ); } void Status::confMisc(bool defGroup) { APP_CONFIG_BEGIN( cfg ); if (defGroup || cfg->hasKey("LevelPosition")) fillArray(levelPos, cfg->readEntry("LevelPosition", "0,1,2,3,,4,,5,,6,,7"), maxLevel); if (defGroup || cfg->hasKey("PixmapDirectory")) { pixmapDirectory = cfg->readEntry("PixmapDirectory"); if (pixmapDirectory.left(1) != "/" && pixmapDirectory.left(1) != "~") pixmapDirectory.insert(0, "pics/"); if (pixmapDirectory.right(1) != "/") pixmapDirectory.append("/"); } if (defGroup || cfg->hasKey("LifesPixmapName")) fillStrList(lifesPixmapName, cfg->readEntry("LifesPixmapName", "lifes.xpm"), maxLevel+1); if (defGroup || cfg->hasKey("LevelPixmapName")) fillStrList(levelPixmapName, - cfg->readEntry("LevelPixmapName", "level.xpm"), maxLevel+1); + cfg->readEntry("LevelPixmapName", "fruit.xpm"), maxLevel+1); APP_CONFIG_END( cfg ); } void Status::confScheme() { APP_CONFIG_BEGIN( cfg ); SAVE_CONFIG_GROUP( cfg, oldgroup ); QString newgroup; // if not set, read mode and scheme from the configfile if (mode == -1 && scheme == -1) { scheme = cfg->readNumEntry("Scheme", -1); mode = cfg->readNumEntry("Mode", -1); // if mode is not set in the defGroup-group, lookup the scheme group if (scheme != -1 || mode == -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); mode = cfg->readNumEntry("Mode", -1); RESTORE_CONFIG_GROUP( cfg, oldgroup ); } } confLevels(); if (mode != -1) { newgroup.sprintf("Mode %d", mode); cfg->setGroup(newgroup); confLevels(FALSE); } if (scheme != -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); confLevels(FALSE); } RESTORE_CONFIG_GROUP( cfg, oldgroup ); confMisc(); if (mode != -1) { newgroup.sprintf("Mode %d", mode); cfg->setGroup(newgroup); confMisc(FALSE); } if (scheme != -1) { newgroup.sprintf("Scheme %d", scheme); cfg->setGroup(newgroup); confMisc(FALSE); } fillPixmapName(lifesPixmapName); fillPixmapName(levelPixmapName); initPixmaps(); setFixedHeight(minHeight()); RESTORE_CONFIG_GROUP( cfg, oldgroup ); APP_CONFIG_END( cfg ); } void Status::setScheme(int Scheme, int Mode) { mode = Mode; scheme = Scheme; confScheme(); repaint(); } int Status::minHeight() { if (lifesPix->isEmpty() && levelPix->isEmpty()) return 0; if (levelPix->isEmpty()) return lifesPix->at(0)->height(); if (lifesPix->isEmpty()) return levelPix->at(0)->height(); return (lifesPix->at(0)->height() > levelPix->at(0)->height()) ? lifesPix->at(0)->height() : levelPix->at(0)->height(); } int Status::minWidth() { if (lifesPix->isEmpty() && levelPix->isEmpty()) return 0; if (levelPix->isEmpty()) return lifesPix->at(0)->width(); if (lifesPix->isEmpty()) return levelPix->at(0)->width(); return (lifesPix->at(0)->width() > levelPix->at(0)->width()) ? lifesPix->at(0)->width() : levelPix->at(0)->width(); } void Status::setLifes(int lifes) { actualLifes = lifes; repaint(); } void Status::setLevel(int Level) { level = Level; initPixmaps(); actualLevel = (level > (int) levelPix->count()) ? (int) levelPix->count() : level; repaint(); } |