From 917fb7d2dca76f5c2c5c86553be0fcc2832c3435 Mon Sep 17 00:00:00 2001 From: cniehaus Date: Sat, 15 Mar 2003 20:50:41 +0000 Subject: merging with the branch. Comments? --- (limited to 'noncore/games/tetrix/ohighscoredlg.cpp') diff --git a/noncore/games/tetrix/ohighscoredlg.cpp b/noncore/games/tetrix/ohighscoredlg.cpp new file mode 100644 index 0000000..cf0dcf7 --- a/dev/null +++ b/noncore/games/tetrix/ohighscoredlg.cpp @@ -0,0 +1,199 @@ +/*************************************************************************** + begin : January 2003 + copyright : ( C ) 2003 by Carsten Niehaus + email : cniehaus@handhelds.org + **************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * ( at your option ) any later version. * + * * + **************************************************************************/ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "ohighscoredlg.h" + +OHighscore::OHighscore( int score , int playerLevel ) +{ + pLevel = playerLevel; + getList(); + checkIfItIsANewhighscore( score ); +} + +OHighscore::~OHighscore() +{ + std::list::iterator deleteIterator = playerData.begin(); + for ( ; deleteIterator != playerData.end() ; deleteIterator++ ) + { + delete ( *deleteIterator ); + } +} + +void OHighscore::getList() +{ + Config cfg ( "tetrix" ); + cfg.setGroup( QString::number( 1 ) ); + lowest = cfg.readNumEntry( "Points" ); + playerData.clear(); + + int rest = 1; //for the filling up later + + for ( int i = 1 ; i < 11 ; i++ ) + { + if ( cfg.hasGroup( QString::number( i ) ) ) + { + cfg.setGroup( QString::number( i ) ); + int temp = cfg.readNumEntry( "Points" ); + + t_playerData *pPlayerData = new t_playerData; + pPlayerData->sName = cfg.readEntry( "Name" ); + pPlayerData->points = temp; + pPlayerData->level = cfg.readNumEntry( "Level" ); + + playerData.push_back( pPlayerData ); + + if ( (temp < lowest) ) lowest = temp; + rest++; + } + } + + //now I fill up the rest of the list + if ( rest < 11 ) //only go in this loop if there are less than + //10 highscoreentries + { + lowest = 0; + for ( ; rest < 11 ; rest++ ) + { + t_playerData *pPlayerData = new t_playerData; + pPlayerData->sName = tr( "empty"); + pPlayerData->points = 0; + pPlayerData->level = 0; + + playerData.push_back( pPlayerData ); + } + } + +} + +void OHighscore::checkIfItIsANewhighscore( int points) +{ + if ( points > lowest ) + isNewhighscore = true; + else + isNewhighscore = false; +} + +void OHighscore::insertData( QString name , int punkte , int playerLevel ) +{ + Config cfg ( "tetrix" ); + int entryNumber = 1; + std::list::iterator insertIterator = playerData.begin(); + while ( insertIterator != playerData.end() ) + { + if ( punkte > ( *insertIterator )->points ) + { + t_playerData* temp = new t_playerData; + temp->sName = name; + temp->points = punkte; + temp->level = playerLevel; + playerData.insert( insertIterator , temp ); + + //now we have to delete the last entry + insertIterator = playerData.end(); + insertIterator--; +//X delete *insertIterator; //memleak? + playerData.erase( insertIterator ); + + ///////////////////////////////////////// + //this block just rewrites the highscore + insertIterator = playerData.begin(); + while ( insertIterator != playerData.end() ) + { + cfg.setGroup( QString::number( entryNumber ) ); + cfg.writeEntry( "Name" , ( *insertIterator )->sName ); + cfg.writeEntry( "Points" , ( *insertIterator )->points ); + cfg.writeEntry( "Level" , ( *insertIterator )->level ); + entryNumber++; + insertIterator++; + } + //////////////////////////////////////// + + return; + } + insertIterator++; + } +} + +QString OHighscore::getName() +{ + QString name; + QDialog *d = new QDialog ( this, 0, true ); + d->setCaption( tr( "Enter your name!" )); + QLineEdit *ed = new QLineEdit ( d ); + ( new QVBoxLayout ( d, 3, 3 ))->addWidget ( ed ); + ed->setFocus ( ); + + if ( d->exec() == QDialog::Accepted ) { + name = ed->text(); + } + //delete d; + return name; +} + +OHighscoreDialog::OHighscoreDialog(OHighscore *highscore, QWidget *parent, const char *name, bool modal) : QDialog(parent, name, modal) +{ + hs_ = highscore; + setCaption( tr( "Highscores" ) ); + vbox_layout = new QVBoxLayout( this, 4 , 4 ); + list = new QListView( this ); + list->setSorting( -1 ); + list->addColumn( tr( "#" )); + list->addColumn( tr( "Name" )); + list->addColumn( tr( "Points" )); + list->addColumn( tr( "Level" )); + + createHighscoreListView(); + + vbox_layout->addWidget( list ); + showMaximized(); +} + +void OHighscoreDialog::createHighscoreListView() +{ + int pos = 10; + int points_ = 0; + int level_ = 0; + + std::list::reverse_iterator iListe = hs_->playerData.rbegin(); + + for ( ; iListe != hs_->playerData.rend() ; ++iListe ) + { + QListViewItem *item = new QListViewItem( list ); + item->setText( 0 , QString::number( pos ) ); //number + item->setText( 1 , ( *iListe )->sName ); //name + if ( ( *iListe )->points == -1 ) + points_ = 0; + else points_ = ( *iListe )->points; + if ( ( *iListe )->level == -1 ) + level_ = 0; + else level_ = ( *iListe )->level; + item->setText( 2 , QString::number( points_ ) ); //points + item->setText( 3 , QString::number( level_ ) ); //level + pos--; + } +} + -- cgit v0.9.0.2