<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="http://reviewboard.kde.org/r/4919/">http://reviewboard.kde.org/r/4919/</a>
     </td>
    </tr>
   </table>
   <br />





<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On August 7th, 2010, 11:11 a.m., <b>Parker Coates</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Hello Stefan. So far it looks quite good, although to be honest, I&#39;m not sure I can really give a thorough review until we get to see some UI to understand how it all comes together. ;) I see the motivation of posting the model for review before moving on, however, and thus far nothing sticks out as obviously wrong/restrictive/inflexible. :)</pre>
 </blockquote>







</blockquote>

<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Hmm. How did I manage to do a double post?</pre>
<br />








<p>- Parker</p>


<br />
<p>On August 8th, 2010, 1:08 p.m., Stefan Majewsky wrote:</p>






<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('http://reviewboard.kde.orgrb/images/review_request_box_top_bg.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for KDE Games.</div>
<div>By Stefan Majewsky.</div>


<p style="color: grey;"><i>Updated 2010-08-08 13:08:47</i></p>




<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">KScore2 is a new framework which ought to replace the commonly used KHighscore/KScoreDialog and perhaps also KExtHighscore. The most central class (and the point where you should start reading the APIDOX) is KScore2::Model.

KScore2 makes use of the Model/View concept to create a simple, extensible, yet future-proof API. Contrary to KScoreManager (the other new highscore library which is in playground/games ATM), KScore2 is designed such that no assumptions about the internal data structures are included in the public interfaces. Its API makes simple tasks easy and complex tasks achievable.

Many KDE games have, over the years, grown their own highscore systems. KScore2 allows to accomodate these special needs: The score model can be made to retrieve its data from arbitrary locations by writing a custom KScore2::Engine subclass. Similarly, a KScore2::CategoryModel can be implemented to support custom highscore grouping (e.g. by difficulty, by level, or by levelpack and level). As an example, the KGameDifficulty::categoryModel() contains the difficulty levels for this application. The internal selection is automatically updated to match the selected difficulty level, so showing the highscore table for the current difficulty level becomes a one-liner.

What I&#39;m presenting here is my current working state. Several things are missing:
* the implementation for KScore2::Model::addScore() plus the relevant logic in the KScore2::Dialog class
* unit tests
* API for gathering game statistics (like KPat and KReversi do; I want input on this one!)

The code is also available from my Git-SVN repository at git://git.bethselamin.de/kdegames-work.git (branch &quot;kscore2&quot;).</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">The score display of KDiamond has been ported. It is able to read the scores which are at the moment still written by KHighscore.</pre>
  </td>
 </tr>
</table>




<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>/trunk/KDE/kdegames/kdiamond/src/mainwindow.cpp <span style="color: grey">(1160372)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/CMakeLists.txt <span style="color: grey">(1160372)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kgamedifficulty.h <span style="color: grey">(1160372)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kgamedifficulty.cpp <span style="color: grey">(1160372)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/categorymodel.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/categorymodel.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/dialog.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/dialog_p.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/engine.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/engine.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/flags.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/flags.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/model.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/model.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/model_p.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/record.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/record.cpp <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/recordformat.h <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/trunk/KDE/kdegames/libkdegames/kscore2/recordformat.cpp <span style="color: grey">(PRE-CREATION)</span></li>

</ul>

<p><a href="http://reviewboard.kde.org/r/4919/diff/" style="margin-left: 3em;">View Diff</a></p>



<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Screenshots </h1>

<div>

 <a href="http://reviewboard.kde.org/r/4919/s/473/"><img src="http://reviewboard.kde.org/media/uploaded/images/2010/08/06/kscoremodel-concept_400x100.png" style="border: 1px black solid;" alt="Relation of the different data sources in KScore2" /></a>

 <a href="http://reviewboard.kde.org/r/4919/s/474/"><img src="http://reviewboard.kde.org/media/uploaded/images/2010/08/08/kscore2-kdiamond_400x100.png" style="border: 1px black solid;" alt="First KScore2 integration in KDiamond" /></a>

</div>


  </td>
 </tr>
</table>








  </div>
 </body>
</html>