]> git.saurik.com Git - wxWidgets.git/blobdiff - demos/forty/scoredg.cpp
Fix wrong in wxListCtrl::SetItemColumnImage() in r74716.
[wxWidgets.git] / demos / forty / scoredg.cpp
index 9f96c6135d43dae43a2aab137abb8dd7b518d89f..4653343b2570f0e36affeb210339715304415320 100644 (file)
@@ -4,18 +4,10 @@
 // Author:      Chris Breeze
 // Modified by:
 // Created:     21/07/97
-// RCS-ID:      $Id$
 // Copyright:   (c) 1993-1998 Chris Breeze
-// Licence:    wxWindows licence
-//---------------------------------------------------------------------------
-// Last modified: 22nd July 1998 - ported to wxWindows 2.0
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation
-#pragma interface
-#endif
-
 // For compilers that support precompilation, includes "wx/wx.h".
 #include "wx/wxprec.h"
 
 #include "wx/wx.h"
 #endif
 
-#if wxUSE_IOSTREAMH
-#if defined(__WXMSW__) && !defined(__GNUWIN32__) && !defined(__MWERKS__)
-#include <strstrea.h>
-#else
-#include <strstream.h>
-#endif
-#else
-#include <strstream>
-//using namespace std;
-#endif
 #include "scorefil.h"
 #include "scoredg.h"
 
+// adjust USE_GRID_FOR_SCORE with O or 1 to your preferences
+// by default it takes wxGrid component for score display if available in target port
+#define USE_GRID_FOR_SCORE     wxUSE_GRID
+
+#if USE_GRID_FOR_SCORE
+#include "wx/grid.h"
+#else
 class ScoreCanvas : public wxScrolledWindow
 {
 public:
-       ScoreCanvas(wxWindow* parent, ScoreFile* scoreFile);
-       virtual ~ScoreCanvas();
+    ScoreCanvas(wxWindow* parent, ScoreFile* scoreFile, const wxPoint& pos, wxSize& size);
+    virtual ~ScoreCanvas();
 
-       void OnDraw(wxDC& dc);
+    void OnDraw(wxDC& dc);
 
 private:
-       wxFont*         m_font;
-       wxString        m_text;
+    wxFont     *m_font;
+    wxString    m_text;
 };
 
-
-ScoreCanvas::ScoreCanvas(wxWindow* parent, ScoreFile* scoreFile) :
-       wxScrolledWindow(parent)
+ScoreCanvas::ScoreCanvas(wxWindow* parent, ScoreFile* scoreFile, const wxPoint& pos, wxSize& size) :
+    wxScrolledWindow(parent, wxID_ANY, pos, size, wxSUNKEN_BORDER)
 {
+    SetBackgroundColour(*wxWHITE);
 #ifdef __WXGTK__
-       m_font = wxTheFontList->FindOrCreateFont(12, wxROMAN, wxNORMAL, wxNORMAL);
+    m_font = wxTheFontList->FindOrCreateFont(12, wxROMAN, wxNORMAL, wxNORMAL);
 #else
-       m_font = wxTheFontList->FindOrCreateFont(10, wxSWISS, wxNORMAL, wxNORMAL);
+    m_font = wxTheFontList->FindOrCreateFont(10, wxSWISS, wxNORMAL, wxNORMAL);
 #endif
 
-        wxArrayString players;
-       scoreFile->GetPlayerList( players);
-
-       ostrstream os;
-
-       os << "Player\tWins\tGames\tScore\n";
-       for (unsigned int i = 0; i < players.Count(); i++)
-       {
-               int wins, games, score;
-               scoreFile->ReadPlayersScore(players[i], wins, games, score);
-               int average = 0;
-               if (games > 0)
-               {
-                       average = (2 * score + games) / (2 * games);
-               }
-
-               os << players[i] << '\t' 
-                  << wins  << '\t'
-                  << games << '\t'
-                  << average << '\n';
-       }
-       os << '\0';
-       char* str = os.str();
-       m_text = str;
-       delete str;
+    wxArrayString players;
+    scoreFile->GetPlayerList( players);
+
+    wxString os;
+
+    os << wxT("Player\tWins\tGames\tScore\n");
+    for (unsigned int i = 0; i < players.Count(); i++)
+    {
+        int wins, games, score;
+        scoreFile->ReadPlayersScore(players[i], wins, games, score);
+        int average = 0;
+        if (games > 0)
+        {
+            average = (2 * score + games) / (2 * games);
+        }
+
+        os << players[i] << wxT('\t')
+           << wins  << wxT('\t')
+           << games << wxT('\t')
+           << average << wxT('\n');
+    }
+    os << wxT('\0');
+    m_text = os;
 }
 
 ScoreCanvas::~ScoreCanvas()
@@ -96,97 +83,126 @@ ScoreCanvas::~ScoreCanvas()
 
 void ScoreCanvas::OnDraw(wxDC& dc)
 {
-       dc.SetFont(* m_font);
-
-       const char* str = m_text;
-       unsigned int tab = 0;
-       unsigned int tabstops[] = { 5, 100, 150, 200 };
-
-       // get the line spacing for the current font
-       int lineSpacing;
-       {
-               long w, h;
-               dc.GetTextExtent("Testing", &w, &h);
-               lineSpacing = (int)h;
-       }
-
-       int y = 0;
-       while (*str)
-       {
-               char text[256];
-               char* dest = text;
-               
-               while (*str && *str >= ' ') *dest++ = *str++;
-               *dest = '\0';
-
-               dc.DrawText(text, tabstops[tab], y);
-
-               if (*str == '\t')
-               {
-                       if (tab < sizeof(tabstops) / sizeof(tabstops[0]) - 1)
-                       {
-                               tab++;
-                       }
-               }
-               else if (*str == '\n')
-               {
-                       tab = 0;
-                       y += lineSpacing;
-               }
-               if (*str) str++;
-       }
+    dc.SetFont(* m_font);
+
+    const wxChar* str = m_text;
+    unsigned int tab = 0;
+    unsigned int tabstops[] = { 5, 100, 150, 200 };
+
+    // get the line spacing for the current font
+    int lineSpacing;
+    {
+        long w, h;
+        dc.GetTextExtent(wxT("Testing"), &w, &h);
+        lineSpacing = (int)h;
+    }
+
+    int y = 0;
+    while (*str)
+    {
+        wxChar text[256];
+        wxChar* dest = text;
+
+        while (*str && *str >= ' ') *dest++ = *str++;
+        *dest = '\0';
+
+        dc.DrawText(text, tabstops[tab], y);
+
+        if (*str == '\t')
+        {
+            if (tab < sizeof(tabstops) / sizeof(tabstops[0]) - 1)
+            {
+                tab++;
+            }
+        }
+        else if (*str == '\n')
+        {
+            tab = 0;
+            y += lineSpacing;
+        }
+        if (*str) str++;
+    }
 }
+#endif
 
 BEGIN_EVENT_TABLE(ScoreDialog, wxDialog)
     EVT_CLOSE(ScoreDialog::OnCloseWindow)
 END_EVENT_TABLE()
 
-ScoreDialog::ScoreDialog(
-                                                       wxWindow* parent,
-                                                       ScoreFile* file
-                                                       ) :
-       wxDialog(parent, -1, "Scores",
-                       wxDefaultPosition, wxSize(310, 200),
-                       wxDIALOG_MODAL | wxDEFAULT_DIALOG_STYLE),
-       m_scoreFile(file)
+ScoreDialog::ScoreDialog(wxWindow* parent, ScoreFile* file) :
+    wxDialog(parent, wxID_ANY, _("Scores"),
+            wxDefaultPosition, wxSize(400, 300)),
+    m_scoreFile(file)
 {
-       // enable constraints
-       SetAutoLayout (TRUE);
-
-       ScoreCanvas* list = new ScoreCanvas(this, m_scoreFile);
-       m_OK = new wxButton(this, wxID_OK, "OK");
-
-       wxLayoutConstraints* layout;
-
-       // Constrain the OK button
-       layout = new wxLayoutConstraints;
-       layout->left.SameAs             (this,  wxLeft,         10);
-       layout->bottom.SameAs   (this,   wxBottom,      10);
-       layout->height.AsIs();
-       layout->width.AsIs();
-       m_OK->SetConstraints(layout);
-
-       // Constrain the list of players
-       layout = new wxLayoutConstraints;
-       layout->left.SameAs             (this,  wxLeft,         10);
-       layout->right.SameAs    (this,  wxRight,        10);
-       layout->top.SameAs              (this,  wxTop,          10);
-       layout->bottom.SameAs   (m_OK,  wxTop,          10);
-       list->SetConstraints(layout);
-
-       Layout();
-}
+    // create grid with players
+    wxArrayString players;
+    file->GetPlayerList(players);
+
+    wxSize sz = wxSize(400, 300);
+
+#if USE_GRID_FOR_SCORE
+    wxGrid* list = new wxGrid(this, wxID_ANY, wxDefaultPosition, sz, 0);
+    list->CreateGrid(players.Count(), 4);
+    for (unsigned int i = 0; i < players.Count(); i++)
+    {
+        int wins, games, score;
+        wxString string_value;
+
+        file->ReadPlayersScore(players[i], wins, games, score);
+        int average = 0;
+        if (games > 0)
+        {
+            average = (2 * score + games) / (2 * games);
+        }
+        list->SetCellValue(i,0,players[i]);
+        string_value.Printf( wxT("%u"), wins );
+        list->SetCellValue(i,1,string_value);
+        string_value.Printf( wxT("%u"), games );
+        list->SetCellValue(i,2,string_value);
+        string_value.Printf( wxT("%u"), average );
+        list->SetCellValue(i,3,string_value);
+    }
+    list->SetColLabelValue(0, wxT("Players"));
+    list->SetColLabelValue(1, wxT("Wins"));
+    list->SetColLabelValue(2, wxT("Games"));
+    list->SetColLabelValue(3, wxT("Score"));
+    list->EnableEditing(false);
+    list->AutoSizeColumns();
+    list->AutoSizeRows();
+    list->SetRowLabelSize(0);
+    list->EnableDragRowSize(false);
+    list->EnableDragColSize(false);
+    list->EnableDragGridSize(false);
+    list->ClearSelection();
+    list->EnableEditing(false);
+    sz.x = wxDefaultCoord;
+#else
+    ScoreCanvas* list = new ScoreCanvas(this, m_scoreFile, wxDefaultPosition, sz);
+#endif
 
-ScoreDialog::~ScoreDialog()
-{
+    list->SetInitialSize(sz);
+
+    // locate and resize with sizers
+    wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
+    topsizer->Add( list, 1, wxALL|wxGROW, 10 );
+    wxButton *button = new wxButton(this, wxID_OK);
+    topsizer->Add( button, 0, wxALIGN_CENTER_HORIZONTAL|wxALL , 10 );
+    button->SetFocus();
+
+    SetSizer( topsizer );
+
+    GetSizer()->Fit(this);
+    GetSizer()->SetSizeHints(this);
+
+    CentreOnParent();
 }
 
 void ScoreDialog::Display()
 {
-       Show(TRUE);
+    ShowModal();
 }
 
-void ScoreDialog::OnCloseWindow(wxCloseEvent& event)
+void ScoreDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
 {
     EndModal(wxID_OK);
 }